0

アプリが閉じられているか、バックグラウンドで一定時間実行されているときはいつでも、NSUserDefaults のすべてのフィールドに保存されているすべての変数を削除したいと考えています。たとえば、5 分間です。

次のような 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

nil に設定するのではなく、オブジェクトを削除することをお勧めします。

- (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 に答える