应用程序从背景,NSManagedObject的nil属性恢复

时间:2013-10-09 15:59:03

标签: iphone ios objective-c core-data nscoder

条件

  • 获取通知(txt消息)
  • 或开幕/闭幕通知中心
  • 或切换到另一个应用,返回

基本上,该应用程序会在短时间内从后台返回。

问题

布局没问题,但是从BackData恢复后,我从CoreData获得的一些属性是空的。几乎所有的视图控制器都存在这个问题。

项目

这是一个具有主tabbar控制器的应用程序,在选项卡中有两个导航控制器,可能还有两个级别的viewcontrollers,它们自己有子UIViews(使用一些信息)。后端由Parse和CoreData组成。

奇怪的部分

从背景返回 - > viewWillAppear上的属性正常(创建id的备份) - >它们是以后的零秒 - >我需要手动取回它们(来自我刚刚存储的ID)

这是一个截图,当在每5秒调用一个函数中放置一个断点来检查当前时间(link to bigger)时:enter image description here

我做了什么

NSCoder实现了状态恢复,每​​个视图控制器都有一个恢复ID,但是当应用程序变为活动状态时,它不会被调用。我不认为NSCoder是这里的问题,因为从操作系统将自己杀死它或者强制退出用户时使用它的文档。

如果NSManagedObjects为nil,我尝试从NSNotificationCenter手动刷新相应ViewControllers中的内容,但它不是面向未来的,并且在每个视图上都不是相同的逻辑。

有什么想法?谢谢!

我的AppDelegate:

- (void)applicationWillResignActive:(UIApplication *)application
{
    NSLog(@"Will Resign Active");
}

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"Entered Background");  
}

- (void)applicationWillEnterForeground:(UIApplication *)application
{
    NSLog(@"Will enter Foreground");
}

- (void)applicationDidBecomeActive:(UIApplication *)application {

    [[NSNotificationCenter defaultCenter] postNotificationName:@"needsRefresh" object:self userInfo:nil]; // Helpful in some viewcontrollers to save variables that are not nil.

    [PF_FBSession.activeSession handleDidBecomeActive];
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    NSLog(@"Will Terminate");
}

1 个答案:

答案 0 :(得分:2)

对于那些找到这个帖子的人来说,这是我找到的解决方案。

我的问题和答案是针对我的项目的。

我有另一个控制器,一个负责我所有数据库连接的控制器,它正在监听applicationDidBecomeActive。 这是调用我的数据的刷新,但也是一个清理",即删除/编辑一些NSManagedObjects,然后保存。

结论:内存地址不一样,对象也没有被认为是相同的,因此在我当前的页面上是空的。

我通过停止清理每个AppDidBecomeActive来修复它,但改为将该逻辑移到AppDidFinishLaunching。

希望有所帮助!