我正在为NSManagedObject
个实例创建子类,并在父类中设置NSManagedObjectModel
和NSManagedObjectContext
。当访问父项中的方法中的数据时,我的objectModel似乎在我使用[self valueForKey:@"id"]
时被释放或以其他方式重置。以下是发生的事情的一个例子:
//this outputs NSManagedObjectModel
NSLog(@"model is %@",NSStringFromClass([model class]));
NSLog(@"this id is %@", [self valueForKey:@"id"]);
//this now outputs __NSCFString
NSLog(@"model is %@",NSStringFromClass([model class]));
为什么要使用valueForKey呢?
答案 0 :(得分:1)
您使用它的方式总是会丢失引用,因为您正在动态创建对象,因此,当您使用完子类时,NSManagedObjectContext将始终被释放。
您应该将NSManagedObjectContext的引用放在单例中,或者使用这样的实用程序方法来获取引用。
#pragma mark - MOC
- (void)initMoc
{
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
self.managedObjectContext = delegate.managedObjectContext;
}
答案 1 :(得分:1)
id
是保留字。你期望输出在那条线上是什么?如果您已经定义了一个名为id
的属性并期望输出该属性,那么您将遇到问题。
您父母的样子是什么?如果您正在关注Apple的模板,则应将NSManagedObjectContext
分配到其他地方,通常在AppDelegate
。
您是如何初始化这些NSManagedObject
个实例的?如果您只是[[NSManagedObject alloc] init]
,那么这也会导致您遇到问题,因为它不是NSManagedObject
的指定初始值设定项。