我想以简单的方式创建 NSManagedObject 的子类的实例:Library *library = [[Library alloc] init]所以我init像这样覆盖了方法。
- (instancetype)init
{
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc]
initWithConcurrencyType:NSMainQueueConcurrencyType];
managedObjectContext.parentContext = [RKManagedObjectStore
defaultStore].mainQueueManagedObjectContext;
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Library"
inManagedObjectContext: managedObjectContext];
self = [super initWithEntity:entityDescription
insertIntoManagedObjectContext:managedObjectContext];
return self;
}
在一个视图中,我创建了一个新实例,Library *library = [[Library alloc] init]这工作得很好。现在我需要向与它有关系的对象添加一个Book对象。Library所以一个新的Book实例应该managedObjectContext和它的父实例相同—— Library。要正确实例化Book,我需要获取Library's managedObjectContent:[library managedObjectContent]回馈nil。几个小时后,我有一个解决方法:
- (instancetype)init
{
NSManagedObjectContext *managedObjectContext = [GTObjectManager newManagedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"City"
inManagedObjectContext: managedObjectContext];
self = [super initWithEntity:entityDescription
insertIntoManagedObjectContext:managedObjectContext];
return self;
}
在 GTObjectManager 中,我的代码与旧的 init 方法中的代码相同:
+ (NSManagedObjectContext *)newManagedObjectContext
{
NSManagedObjectContext *managedObjectContext = [[NSManagedObjectContext alloc]
initWithConcurrencyType:NSMainQueueConcurrencyType];
managedObjectContext.parentContext = [RKManagedObjectStore
defaultStore].mainQueueManagedObjectContext;
return managedObjectContext;
}
现在实例化Library *library = [[Library alloc] init]调用[library managedObjectContext]返回 not之后nil。所以澄清一下:如果managedObjectContext在init方法中创建,实例化后我无法得到它。如果在方法managedObjectContent之外创建init,我可以在实例化后得到它。
我无法解释这种行为。它是一种init方法的行为吗?我正在使用 ARC,它是某种 ARC 行为吗?