#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;
}