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
の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]
戻り値は返されませんnil
。したがって、明確にするために、メソッドでmanagedObjectContext
作成されたinit
場合、インスタンス化後に取得できません。managedObjectContent
メソッドの外部で作成された場合init
、インスタンス化した後に取得できます。
私はその行動を説明することはできません。init
それはメソッドの振る舞いですか?私はARCを使用していますが、それはある種のARCの動作ですか?