目前,我正在开发一个预订汽车的应用程序。所有预订相关数据都存储在实体“预订”中。由于“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 以及如何避免呢?它是错误还是预期的行为?