0

每当应用程序关闭或在后台运行一段时间(例如 5 分钟)时,我想消除保存到 NSUserDefaults 的所有字段中的所有变量。

我尝试向 applicationDidFinishLaunching 的应用程序委托添加一行,如下所示:

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 变量”的条件 - 有帮助吗?

4

3 回答 3

8

我建议删除对象而不是将其设置为零。

- (void)removeObjectForKey:(NSString *)defaultName;

NSUserDefaults 的正常行为是在没有与查询匹配的键时返回 nil,所以我认为最好遵循相同的规则,而不是为某个键存储 nil。

希望能帮助到你。

于 2010-09-04T15:52:46.403 回答
0

也许你应该使用 applicationDidEnterBackground:。看看这个苹果文档页面。

于 2010-09-04T15:37:06.053 回答
0

我会做以下事情:在- (void)applicationWillResignActive:(UIApplication *)applicationUIApplication 的委托调用中,我会在应用程序进入后台时保存一个时间戳。在这种情况下,您不必检查应用程序是否进入后台,或者它是否只是被例如 SMS 中断但用户点击取消并继续使用您的应用程序。

当应用程序再次启动时,在 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

于 2010-09-04T15:37:41.337 回答