我想以简单的方式创建 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 行为吗?