当app关闭或在后台时,iPhone将NSUserDefaults设置为nil

时间:2010-09-04 15:27:16

标签: ios application-state

每当应用关闭或在后台运行一段时间(比如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变量'的条件 - 任何帮助?

3 个答案:

答案 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