使用valueForKey后释放NSManagedObjectModel

时间:2014-02-13 02:37:34

标签: objective-c core-data

我正在为NSManagedObject个实例创建子类,并在父类中设置NSManagedObjectModelNSManagedObjectContext。当访问父项中的方法中的数据时,我的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呢?

2 个答案:

答案 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的指定初始值设定项。