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の動作ですか?