为什么未保存的managedObject会丢失其managedObjectContext

时间:2013-04-05 17:05:13

标签: core-data nsmanagedobject nsmanagedobjectcontext

目前,我正在开发一款预订汽车的应用程序。所有预订相关数据都存储在实体“预订”中。由于“预订”的某些属性或“预订”与其他内容之间的关系是强制性的,我决定将实体“预订”的所有托管对象添加到他们自己的托管对象中。此上下文也将存储在单独的变量中以避免丢失它。这工作正常,除非我签署(企业商店或adhoc)我的应用程序并部署它。 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]);

没有任何保存或更改但上下文为空。

设备上的控制台输出(通过iPhone-Configurator或Testflight进行签名和部署)

... Context: (null)

模拟器或设备上的控制台输出(已签名但通过Xcode安装)

... Context: <NSManagedObjectContext: 0x893c520>

那么为什么未保存的managedObject会丢失其managedObjectContext,如何避免这种情况呢?这是一个错误还是预期的行为?

1 个答案:

答案 0 :(得分:1)

您的上下文在函数结束时无效。 see here
您的对象被上下文所取消,使其所有属性为null,在调试模式下,存在一个自动释放池,以防止上下文被释放。