iOS:当应用程序终止时,NSDefault将无法保存/加载

时间:2013-06-25 23:43:34

标签: ios appdelegate

亲爱的专家和朋友们,

嗨,我一直试图让这一天失望,但我尝试的任何东西似乎都没有用。基本上我想使用NSDefault保存一个字符串数组(最大值:20,没有重量级)。它保存,它加载正常,但不是当我通过按下减号按钮杀死真实设备上的应用程序。我在iPhone 4gs(iOS 6)上测试过它。

我试过
[[NSUserDefaults standardUserDefaults] synchronize];
in both
applicationWillTerminate:(UIApplication *)application
and
applicationDidEnterBackground:(UIApplication *)application
但它没有用。

注意:从NSLog,只要我不在真实设备的后台杀死应用程序,我就可以从NSDefault获得更好的值。

有谁知道为什么?提前谢谢了。请举例来说。

=========================编辑(添加代码):

我正在添加一些代码,希望它会更清晰,有人可以真正帮助我。

提前致谢。 一些动作,然后

self.count = [NSNumber numberWithInt:[self.count intValue] + 1];
count is a NSNumber 
 NSData *count = [NSKeyedArchiver archivedDataWithRootObject:self.count];
[[NSUserDefaults standardUserDefaults] setObject:count forKey:@"count"];
[[NSUserDefaults standardUserDefaults] synchronize];
arrayForSavedKey is a NSMutableArray
[[NSUserDefaults standardUserDefaults] synchronize];
NSData *array = [NSKeyedArchiver archivedDataWithRootObject:self.arrayForSavedKey];
[[NSUserDefaults standardUserDefaults] setObject:array forKey:@"arrayForSavedKeys"];

两者:
    applicationWillResignActive :( UIApplication *)应用程序

applicationWillEnterBackground:(UIApplication *)application

我尝试添加以下行     [[NSUserDefaults standardUserDefaults] synchronize]; 要检索数据,我让Delegate调用A类中的方法 致电:      loadSavedData 和unarchiving如此:

NSData *savedKeys = [[NSUserDefaults standardUserDefaults] objectForKey:@"arrayForSavedKeys"];<br>
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithData:savedKeys]];<br>
self.arrayForSavedKey = [[NSMutableArray alloc] initWithArray: array];<br>

(其中只有几个NSStrings)

其中我NSLOG的输出和一切都很好因为我没有通过减号杀死应用程序。 (但是使用真实的设备我无法从NSLog看到任何东西,当然,因为一旦我杀了App,App就会在xCode中停止运行)

我今天花了一整天时间,我的智慧结束了。请帮忙。

1 个答案:

答案 0 :(得分:3)

applicationWillTerminate:仅针对一些非常特殊的案例进行调用,所以不要理会使用它。

使用applicationWillEnterForeground:保存默认值太晚了。

调用[[NSUserDefaults standardUserDefaults] synchronize];的正确位置在applicationDidEnterBackground:方法中。这样,如果您的应用程序在后台被终止,则默认值已经保存。