1

現在、車を予約するアプリを開発しています。すべての予約関連データはエンティティ「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 を失うのはなぜですか? また、これを回避するにはどうすればよいでしょうか? それはバグですか、それとも予想される動作ですか?

4

1 に答える 1

1

関数の最後でコンテキストが無効になります。here を参照して
ください オブジェクトは、すべてのプロパティをnullにするコンテキストによって否認されます。デバッグモードでは、コンテキストが割り当て解除されないようにする自動解放プールが存在します。

于 2013-04-06T05:16:14.720 に答える