为什么一个未保存managedObject失去managedObjectContext(Why do

2019-10-17 23:49发布

目前,我正在开发一个应用程序来预订汽车。 所有预订相关的数据都存储在一个实体“预约”。 由于“预约”等enties之间的“预约”的某些属性或关系是强制性的,我决定实体“预约”的所有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;
    }
}

在这种状态下,预定对象不会被保存!

类BookingsVC

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

没有保存或改变,但是情况下是空的。

上设备的控制台输出(自组织签署并通过iPhone-配置或部署Testflight)

... Context: (null)

上模拟器或设备(自组织签署但通过Xcode的安装)控制台输出

... Context: <NSManagedObjectContext: 0x893c520>

那么,为什么一个未保存managedObject失去managedObjectContext和这可怎么避免? 它是一个错误或预期的行为?

Answer 1:

你的背景是在你的函数结束时废止。 看这里
你的目的,是通过其所有属性空的背景下六亲不认,在调试模式下存在一个自动释放池保持被释放的背景下。



文章来源: Why does an unsaved managedObject lose its managedObjectContext