2014-09-04 82 views
0

我有一个类,在其中我将某个实体的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在所有这些之后仍然存在于内存中。

+0

这种情况发生在对象被删除或从上下文或存储中删除但仍保留对其的引用时 – quellish 2014-09-06 23:17:32

+0

它应该不会被删除,在那里没有像deleteObject那样的东西,再加上为什么它在didAppear和willAppear之间被删除是神秘的。 – 2014-09-08 15:09:28

回答

0

这些生命周期方法中没有任何其他事情会发生,这会影响此实体_userPerformanceRecord。

也许,但是您的托管对象可能发生了其他事情。我会建议也记录对象本身(被管理对象上下文可能nil因为对象是nil

它也可能有些事情要和你建立了伊娃的方式,尝试访问self.object而非_object。请显示伊娃声明并指明您指定对象的位置。首选位置是prepareForSegue

+0

它的不是基于故事板的项目,它具有简单的导航控制器,我使用pushViewController作为相同的自定义init方法,将函数中的变量(它是一个旧项目,自iOS 5以来挂起)传递给它。我检查了_userPerformanceRecord,它不是零,它存在于内存中。另外,当我拥有对象的内存时,如何通过_object或self.object访问属性的方式会有所不同,但管理的对象上下文不存在。我将使用苹果的技术支持,几乎尝试了一切。 – 2014-09-06 00:10:54