【发布时间】:2010-09-16 18:49:23
【问题描述】:
我知道我可以在数据模型或实体类的 -awakeFromInsert 方法中设置默认值。例如,要使“日期”属性默认为当前日期:
- (void) awakeFromInsert
{
NSDate *now = [NSDate date];
self.date = now;
}
如何将“idNumber”属性默认设置为比前一个对象的 idNumber 大一?
谢谢,奥利
编辑:我尝试的相关代码(现已更正)
- (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)。表中的两个条目是链接的 - 编辑/删除一个也编辑/删除另一个。出于这个原因,我相信它与托管对象上下文有关。对于它的价值,无论在 awakFromNib 中调用多少次 maxIdNumber 方法,结果(两个副本)都是相同的;即使 self.idNumber 只是设置为 [NSNumber numberWithInt:5] 并且 maxIdNumber 方法只是为一次性变量调用。
有什么线索吗??
【问题讨论】:
-
顺便说一句,Apple 不建议在实体中使用您自己的 ID 值。您可以使用 NSManagedObject 的 objectID 方法来获取 NSManagedObjectID 对象,它对于任何对象都是唯一的。
-
不幸的是,当它被持久化到商店时,这个 id 会从临时 id 变为永久 id。可以理解的是,大多数开发人员只是为了简单起见而使用自己的 ID 系统,而且效果很好。
-
谢谢,“idNumber”字段不是用于区分对象,它是用户必须提供的实体的属性(他们可以选择拥有两个具有相同 idNumber 的对象,有选择!!) .它将与实体的其他属性一起显示在表格中。
标签: cocoa core-data default-value