Я знаю, что могу установить значения по умолчанию либо в модели данных, либо в методе -awakeFromInsert класса сущности. Например, чтобы сделать свойство «дата» по умолчанию текущей датой:
- (void) awakeFromInsert
{
NSDate *now = [NSDate date];
self.date = now;
}
Как я могу сделать свойство «idNumber» по умолчанию на единицу больше, чем idNumber предыдущего объекта?
Спасибо, Оли
EDIT: Соответствующий код для моей попытки (сейчас исправлено)
- (void) awakeFromInsert
{
self.idNumber = [NSNumber numberWithInt:[self maxIdNumber] + 1];
}
-(int)maxIdNumber{
NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Flight" inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:entityDescription];
// Set example predicate and sort orderings...
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"idNumber > %@", [NSNumber numberWithInt:0]];
[request setPredicate:predicate];
[request setFetchLimit:1];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"idNumber" ascending:NO];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[sortDescriptor release];
NSError *error;
NSArray *array = [moc executeFetchRequest:request error:&error];
if (array == nil | array.count == 0)
{
return 0;
}
return [[[array objectAtIndex:0] valueForKey:@"idNumber"] intValue];
}
При вызове метода maxIdNumber новый объект добавляется в таблицу дважды!? (но с правильным idNumber). Две записи в таблице связаны — редактирование/удаление одной также редактирует/удаляет другую. По этой причине я считаю, что это как-то связано с контекстом управляемого объекта. Как бы то ни было, результат (две копии) один и тот же, независимо от того, сколько раз вызывается метод maxIdNumber в awakFromNib; даже если для self.idNumber просто установлено значение [NSNumber numberWithInt:5], а метод maxIdNumber просто вызывается для одноразовой переменной.
Есть подсказки??