1

目前,我正在开发一个预订汽车的应用程序。所有预订相关数据都存储在实体“预订”中。由于“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;
    }
}

在这种状态下,Booking 对象将不会被保存!

课程预订VC

Bookings *booking = [Bookings booking];
NSLog(@"Context: %@", [booking managedObjectContext]);

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

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

... Context: (null)

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

... Context: <NSManagedObjectContext: 0x893c520>

那么为什么一个未保存的 managedObject 会丢失它的 managedObjectContext 以及如何避免呢?它是错误还是预期的行为?

4

1 回答 1

1

您的上下文在函数结束时无效。看到这里
你的对象被上下文否定,使其所有属性都为空,在调试模式下,存在一个自动释放池,防止上下文被释放。

于 2013-04-06T05:16:14.720 回答