0

尊敬的专家和朋友,

嗨,我一整天都在努力解决这个问题,但我尝试过的任何方法似乎都不起作用。基本上我想使用 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 *)application

applicationWillEnterBackground:(UIApplication *)application

我尝试添加以下行 [[NSUserDefaults standardUserDefaults] synchronize]; 为了检索数据,我让委托调用类 A 中的方法,方法是调用: loadSavedData 并像这样取消归档:

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 中看到任何内容,因为一旦我杀死了应用程序,应用程序也会在 xCode 中停止运行)

我今天已经度过了一整天,我正在竭尽全力。请帮忙。

4

1 回答 1

3

仅在一些非常特殊的applicationWillTerminate:情况下才需要,所以不要费心使用它。

使用applicationWillEnterForeground:保存默认设置为时已晚。

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

于 2013-06-25T23:49:53.223 回答