条件
- 收到通知(txt 消息)
- 或开/关通知中心
- 或切换到另一个应用程序,回来
基本上,该应用程序会在短时间内从后台返回。
问题
布局还可以,但是从后台恢复后,我从 CoreData 获得的一些属性是空的。我几乎所有的视图控制器都存在这个问题。
该项目
这是一个应用程序,它有一个主标签栏控制器,标签内有两个导航控制器,可能还有两层视图控制器,它们有自己的子 UIViews(使用一些信息)。后端由 Parse 和 CoreData 组成。
奇怪的部分
从后台返回-> viewWillAppear 上的属性正常(创建 id 的备份)-> 它们在零秒后 -> 我需要手动取回它们(从我刚刚存储的 ID)
这是一个屏幕截图,当在每 5 秒调用一次的函数中放置一个断点以检查当前时间(更大的链接):
我做了什么
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");
}