亲爱的专家和朋友们,
嗨,我一直试图让这一天失望,但我尝试的任何东西似乎都没有用。基本上我想使用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中停止运行)
我今天花了一整天时间,我的智慧结束了。请帮忙。
答案 0 :(得分:3)
applicationWillTerminate:
仅针对一些非常特殊的案例进行调用,所以不要理会使用它。
使用applicationWillEnterForeground:
保存默认值太晚了。
调用[[NSUserDefaults standardUserDefaults] synchronize];
的正确位置在applicationDidEnterBackground:
方法中。这样,如果您的应用程序在后台被终止,则默认值已经保存。