【问题标题】:App resumed from Background, nil property of NSManagedObject应用程序从背景恢复,NSManagedObject 的 nil 属性
【发布时间】:2013-10-09 15:59:02
【问题描述】:

条件

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

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

问题

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

项目

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

奇怪的部分

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

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

我做了什么

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

如果 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");
}

【问题讨论】:

  • 你有没有试过在 _booking 的设置器上设置一个断点,看看它是什么?很难知道发生了什么,因为您没有显示任何实现代码,或者您是否在 applicationWillEnterForeground 等中发送了任何可能影响此的通知。
  • @iWasRobbed 已编辑!我的委托几乎是空的,我将使用更多相关代码再次编辑
  • 我在 Swift 项目中遇到了同样的问题。有人解决这个问题吗?
  • @nh32rg 我发现了问题,把答案贴在下面

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


【解决方案1】:

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

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

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

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

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

希望有所帮助!

【讨论】:

  • 我正在做一些我忘记的类似事情,你的小费提醒了我!感谢您的帮助。
猜你喜欢
  • 2016-08-02
  • 1970-01-01
  • 2012-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-13
  • 2017-09-14
  • 1970-01-01
相关资源
最近更新 更多