現在、車を予約するアプリを開発しています。すべての予約関連データはエンティティ「Bookings」に保存されます。「Bookings」の一部の属性、または「Bookings」と他のエンティティ間の関係は必須であるため、エンティティ「Bookings」のすべての managedObjects を独自の managedObjectContext に追加することにしました。このコンテキストは、失われないように別の変数にも格納されます。アプリに署名 (エンタープライズ ストアまたはアドホック) して展開しない限り、これは正常に機能します。ARC が有効になっています。
クラス予約インターフェース
@interface Bookings : NSManagedObject {
@private
NSManagedObjectContext *mContext;
}
@end
クラス予約の実装
@implementation Bookings {
+ (Bookings *)booking {
NSManagedObjectContext *context = [[NSManagedObjectContext alloc] initWithConcurrencyType:concurrencyType];
[context setPersistentStoreCoordinator:[self persistentStoreCoordinator]];
Bookings *object = (Bookings*)[[NSManagedObject alloc] initWithEntity:[self entityForName:pName] insertIntoMarenagedObjectContext:context];
[object setSomeReservationData:...];
...
// here I store the context in an ivar of my booking object
[object->mContext = context];
return object;
}
}
この状態では、予約オブジェクトは保存されません!
クラス予約VC
Bookings *booking = [Bookings booking];
NSLog(@"Context: %@", [booking managedObjectContext]);
何も保存または変更されていませんが、コンテキストは null です。
デバイスのコンソール出力 (iPhone Configurator または Testflight を介してアドホックに署名および展開)
... Context: (null)
シミュレーターまたはデバイスのコンソール出力 (アドホック署名されていますが、Xcode 経由でインストールされています)
... Context: <NSManagedObjectContext: 0x893c520>
それでは、保存されていない managedObject がその managedObjectContext を失うのはなぜですか? また、これを回避するにはどうすればよいでしょうか? それはバグですか、それとも予想される動作ですか?