我有一个类,在其中我将某个实体的PluginNewObject插入到托管对象上下文中。托管对象上下文直接从应用程序的代理中检索,并且也是“强壮”的属性。丢失其托管对象上下文的对象
这里是我如何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,但如果我从应用程序的原始managedObjectContext它仍然存在于内存中,只是managedObjectContext与实体的关联正在迷失。我不知道如何通过视图的生命周期方法,对象managedObjectContext可能会丢失。只需补充一点,_userPerformanceRecord在所有这些之后仍然存在于内存中。
这种情况发生在对象被删除或从上下文或存储中删除但仍保留对其的引用时 – quellish 2014-09-06 23:17:32
它应该不会被删除,在那里没有像deleteObject那样的东西,再加上为什么它在didAppear和willAppear之间被删除是神秘的。 – 2014-09-08 15:09:28