Установка повторяющегося значения для атрибута путем подсчета связанных элементов в Core Data

#objective-c #core-data #iterator #nsmanagedobject

#цель-c #core-данные #итератор #nsmanagedobject

Вопрос:

Я пытаюсь присвоить значению атрибута автоматически повторяющееся число на основе отношения «к одному». У меня есть объект с именем «Encounter», который имеет отношение «Ко многим» к «Round», и мне нужно, чтобы атрибут просто выполнял итерацию до следующего значения и отражал количество раундов, связанных в данный момент с объектом Encounter. У меня есть соответствующая модель данных, представления таблиц и контроллеры массива, привязанные и настроенные в interface Builder, и все они работают нормально. Но когда я пытаюсь сослаться на свойство encounter из моего подкласса Round для NSManagedObject, я получаю просто get null.

пример:

 - (void) awakeFromInsert{
    [super awakeFromInsert];    
    Encounter *enc = [self encounter];
    NSUInteger roundCount = [[enc rounds]count];
    [self setValue:[NSNumber numberWithUnsignedInteger:roundCount] forKey:@"roundNumber"];
    }
  

Я также попытался создать метод, который выполняет запрос выборки в контексте управляемого объекта, но я не понял, как написать предикат, который извлекает только связанные записи для подсчета. Я уверен, что это что-то простое, чего мне не хватает, и я был бы признателен за любую помощь.

Ответ №1:

Я нашел решение, которое, кажется, работает хорошо. По сути, я выделил подкласс NSArrayController и переопределил метод AddObject, чтобы он выглядел следующим образом, причем «Round» — это имя подкласса NSManagedObject:

 -(id)newObject{
    Round *round = (Round *)[super newObject];
    round.roundNumber = [NSNumber numberWithUnsignedInteger:[[self arrangedObjects]count] 1];
    return round;
}