iphone - 应用程序从后台恢复,NSManagedObject 的 nil 属性

标签 iphone ios objective-c core-data nscoder

条件

  • 收到通知(txt 消息)
  • 或打开/关闭通知中心
  • 或切换到另一个应用,回来

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

问题

布局没问题,但从 Background 恢复后,我从 CoreData 获得的一些属性为空。我几乎所有的 View Controller 都存在这个问题。

项目

这是一个有一个主标签栏 Controller 的应用程序,标签内有两个导航 Controller ,可能还有两层 View Controller ,它们自己有子 UIView(使用一些信息)。后端由 Parse 和 CoreData 组成。

奇怪的部分

从后台返回 -> viewWillAppear 上的属性正常(创建 ID 的备份) -> 它们在零秒后 -> 我需要手动取回它们(从我刚刚存储的 ID)

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

我做了什么

NSCoder 实现了状态恢复,每​​个 View Controller 都有一个恢复 ID,但是当应用程序处于事件状态时它不会被调用。我不认为 N​​SCoder 是这里的问题,因为从文档来看,当操作系统自行终止它或用户强制退出时会使用它。

如果 NSManagedObjects 为零,我尝试从 NSNotificationCenter 手动刷新相应 ViewControllers 中的内容,但这不是面向 future 的,并且每个 View 的逻辑都不相同。

有什么想法吗?谢谢!

我的 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");
}

最佳答案

对于那些找到这个线程的人,这里是我找到的解决方案。

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

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

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

我通过停止清理每个 AppDidBecomeActive 来修复它,而是将该逻辑移至 AppDidFinishLaunching。

希望对您有所帮助!

关于iphone - 应用程序从后台恢复,NSManagedObject 的 nil 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19276967/

相关文章:

iphone - Appstore-仅包含YouTube视频的应用程序会被接受吗?

jquery - iOS 的 CSS 下拉菜单在单击和/或悬停时打开

ios - 如何将图像文字添加到数组并显示它们?

ios - 对 UISegmentedControl 图像进行动画处理

ios - dataTaskWithURL doco是什么意思:{NSURLErrorDomain,NSURLErrorCancelled}的错误值是什么意思?

iphone - 编写一个应用程序将视频流式传输到 iPhone

iphone - CCFollow 与 CCParticleSystem

java - 模拟器工具,适用于 Iphone、智能手机和任何手机初学者的编程环境

ios - WatchKit,AttributedString 格式不起作用

ios - xcode 7 json 总是在 Objective C 中显示错误