我有一个类,我将某个实体的InsertNewObject插入到托管对象上下文中。托管对象上下文直接从应用程序的委托中检索,也是一个“强大”属性。
以下是我在parentViewController中创建实体的方法
_userPerformanceRecord = [NSEntityDescription insertNewObjectForEntityForName:@"KRUserPerformance" inManagedObjectContext:[_gAppData managedObjectContext]];
现在根据我的任务,我必须将这个对象传递给一个新的视图控制器,在那里我将对其值进行一些更改,然后最终将其保存到数据库中。
现在,视图的生命周期方法中发生了什么。
init method
NSLog(@"init : Object context for record %@", _userPerformanceRecord.managedObjectContext);
viewDidLoad
NSLog(@"load : Object context for record %@", _userPerformanceRecord.managedObjectContext);
viewWillAppear
NSLog(@"will appear : Object context for record %@", _userPerformanceRecord.managedObjectContext);
viewDidAppear
NSLog(@"appear : Object context for record %@", _userPerformanceRecord.managedObjectContext);
NSLog(@"Default Managed Object Context: %@",[_gAppData managedObjectContext]);
这些生命周期方法中没有其他任何事情会影响这个实体_userPerformanceRecord。
输出如下
2014-09-04 13:46:01.957 myApp[5404:60b] init : Object context for record <NSManagedObjectContext: 0x15670eb0>
2014-09-04 13:46:01.958 myApp[5404:60b] <NSManagedObjectContext: 0x15670eb0>
2014-09-04 13:46:02.037 myApp[5404:60b] check perf : Object context for record <NSManagedObjectContext: 0x15670eb0>
2014-09-04 13:46:02.047 myApp[5404:60b] load : Object context for record <NSManagedObjectContext: 0x15670eb0>
2014-09-04 13:46:02.048 myApp[5404:60b] will appear : Object context for record <NSManagedObjectContext: 0x15670eb0>
2014-09-04 13:46:02.764 myApp[5404:60b] appear : Object context for record (null)
2014-09-04 13:46:02.764 myApp[5404:60b] Default Managed Object Context: <NSManagedObjectContext: 0x15670eb0>
所以现在如果你观察输出,你会发现实体的mananagedObjectContext一直存在到viewWillAppear但是在viewDidAppear中_userPerformanceRecord正在丢失它的managedObjectContext,但如果我从app delegate获取原始的managedObjectContext,它仍然存在于内存中,只是关联带有实体的managedObjectContext正在迷失。我不知道如何通过视图的生命周期方法,对象managedObjectContext可能会丢失。只是要添加,_userPerformanceRecord在所有这些之后仍然存在于内存中。
答案 0 :(得分:0)
这些生命周期方法中没有其他任何事情会影响这个实体_userPerformanceRecord。
可能,但可能还有其他事情发生在您的托管对象上。我建议还要记录对象本身(托管对象上下文可能是nil
,因为对象是nil
。
它也可能与您设置ivar的方式有关。尝试访问self.object
而不是_object
。请显示ivar声明和您分配对象的状态。首选地点是prepareForSegue
。