每当应用关闭或在后台运行一段时间(比如5分钟)时,我想要消除保存到NSUserDefaults所有字段中的所有变量。
我尝试在applicationDidFinishLaunching的app委托中添加一行,如下所示:
if (UIApplicationStateBackground == TRUE) {
NSUserDefaults *profiles = [NSUserDefaults standardUserDefaults];
[profiles setObject:nil forKey:@"name1"];
[profiles synchronize];
}
我还将这部分添加到applicationWillTerminate:
NSUserDefaults *profiles = [NSUserDefaults standardUserDefaults];
[profiles setObject:nil forKey:@"name1"];
[profiles synchronize];
这些似乎都不起作用,我不知道如何设置'如果5分钟超过应用程序在后台,删除NSUserDefaults变量'的条件 - 任何帮助?
答案 0 :(得分:8)
我建议删除该对象,而不是将其设置为nil。
- (void)removeObjectForKey:(NSString *)defaultName;
当没有与查询匹配的密钥时,NSUserDefaults的正常行为是返回nil,所以我认为最好遵循相同的规则而不是为某个密钥存储nil。
希望它有所帮助。
答案 1 :(得分:0)
也许你应该使用applicationDidEnterBackground:。查看this apple doc页面。
答案 2 :(得分:0)
我会执行以下操作:在UIApplication的委托调用- (void)applicationWillResignActive:(UIApplication *)application
中,我会在应用程序进入后台时保存时间戳。在这种情况下,您不必检查应用程序是否转到后台,或者它是否被例如中断。短信,但用户点击取消并继续使用您的应用程序。
当应用程序再次启动时,在UIApplication - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
的另一个委托方法中实现代码,以确定您处于非活动状态的时间并根据持续时间擦除UserDefaults。
有关应用程序变为非活动状态和重新启动的详细信息,请查看Apple文档的此文档http://developer.apple.com/iphone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/CoreApplication/CoreApplication.html#//apple_ref/doc/uid/TP40007072-CH3-SW10