0

UIApplicationWillTerminateNotificationNSUserDefaultsを使用してアプリケーションの現在の状態を保存する必要があります。ここで、ユーザーがアプリケーションからログアウトしたときに、以前の状態でアプリケーションをロードする必要があります。私のアプリケーションはTabBarベースのアプリケーションであり、ナビゲーションコントローラーになっています。ナビゲーションコントローラーにロードされている現在のビューコントローラーと、ナビゲーションコントローラーが存在する現在のタブを保存する必要があります。私のアプリケーションは別のユーザーに対して機能し、ユーザーに固有のアプリケーションの状態を保存する必要があります。したがって、ユーザーデータも保存する必要があります。StackOverflowで検索し、Googleで検索したところ、NSUserDefaults同じためにUIApplicationWillTerminateNotificationが必要です。私がこれらのものに出くわすのはこれが初めてです。誰かが私の要件を達成する方法についてのチュートリアルまたはサンプルコードを投稿できますか?

4

2 に答える 2

1

通知自体に登録して(NSNotificationCenterを参照)、そこに保存/読み込みコードを書き込むか、次のフックを提供するAppDelegateにコードを配置することができます。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
- (void)applicationWillResignActive:(UIApplication *)application;
- (void)applicationDidEnterBackground:(UIApplication *)application;
- (void)applicationWillEnterForeground:(UIApplication *)application;
- (void)applicationDidBecomeActive:(UIApplication *)application;
- (void)applicationWillTerminate:(UIApplication *)application;

AppDelegate.mファイルを見ると、それらの使用方法に関するいくつかのドキュメントを含むスタブの実装を確認できます。

そこでは、必要に応じて、NSUserDefaultsにデータを書き込んだり、NSUserDefaultsからデータを読み取ったりするだけです。

// Store the data
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:fooObject forKey:@"Foo"];
[defaults setObject:barObject forKey:@"Bar"];
[defaults synchronize];

// Load the data
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *fooObject = [defaults objectForKey:@"Foo"];
NSString *barObject = [defaults objectForKey:@"Bar"];
于 2012-05-16T16:42:36.007 に答える
1

私はあなたがの使用法を知っていると仮定していますNSUserDefaults。この特定のタスクでは、次の状態を保存する必要があります。

  1. タブバーコントローラー-selectedIndex現在のタブのを取得し、それをuserDefaultsに保存します。

  2. そのタブのNavigationController-ご存知のように、NavigationControllerはその中のViewControllerに他なりませんnavigationArray。そのViewControllerを取得しindex、それをに保存する必要がありuserDefaultsます。

それはほとんどそれです。それらを(他のユーザーの未保存データと一緒に)に保存する必要があり、それによってUIApplicationWillTerminateそれらが保存されます。synchronize強制的に保存するには、userDefaultsを忘れないでください。:)

于 2012-05-16T16:46:42.023 に答える