2

私のアプリにはいくつかのビューが含まれています。アプリが起動し、ユーザーがまだウィザードを完了していないときに、小さなセットアップを表示したいと思います。NSUserDefaultsを使用してこれを実現できることはわかっていますが、NSUserDefaultsストレージの入力文字列に応じて、特定のビューを表示する方法がわかりません。

私のAppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    NSString *controllerName = [[NSUserDefaults standardUserDefaults] objectForKey:@"WIZARD_VIEW"];
    if ([controllerName length]) {
        Class controllerClass = NSClassFromString(controllerName);
        UIViewController *controller = [[controllerClass alloc] init];

    // Override point for customization after application launch.
    return YES;
    }

次に、viewcontrollerファイルに、jfallerからの提案として次のコードを追加しました。

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSUserDefaults* standard=[NSUserDefaults standardUserDefaults];
    [standard registerDefaults: @{ @"WIZARD_VIEW" : [[self class]description]} ];    [[NSUserDefaults standardUserDefaults] synchronize];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    NSUserDefaults* standard=[NSUserDefaults standardUserDefaults];
    [standard registerDefaults: @{ @"WIZARD_VIEW" : [[self class]description]} ];
    [[NSUserDefaults standardUserDefaults] synchronize];
}

しかし、セットアップで選択された特定のビューを表示するようにこれを作成するにはどうすればよいですか?

4

2 に答える 2

3

個人的に、私は次のことをします:

ユーザーがウィザードの新しいビューに移動するたびに、UIViewControllerをユーザーのデフォルトで記録します。

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];
  [[NSUserDefaults standardUserDefaults] setObject:[[self class] description] forKey:WIZARD_VIEW];
  [[NSUserDefault standardUserDefaults] synchronize];
}

- (void)viewWillDisappear:(BOOL)animated {
  [super viewWillDisappear:animated];
  [[NSUserDefaults standardUserDefaults] removeObjectForKey:WIZARD_VIEW];
  [[NSUserDefault standardUserDefaults] synchronize];
}

ユーザーがアプリを再起動したら(仮想的にはウィザードの途中で)、ビューをリロードします。

- (BOOL)application:(UIApplication *)application
    willFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  // etc.
  NSString *controllerName = [[NSUserDefaults standardUserDefaults] objectForKey:WIZARD_VIEW];
  if ([controllerName length]) {
    Class controllerClass = NSClassFromString(controllerName); 
    NSViewController *controller = [[controllerClass alloc] init];
    // push the controller, or whatever....
  }
  // etc.
}
于 2012-11-20T20:40:29.590 に答える
1

ビューが読み込まれるときに、現在のビューをNSUserDefaultsに書き込みます。次に、の値を確認しますdidFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"current_setup"] isEqualToString:@"1"]) {

         //on view 1!   

    }

}
于 2012-11-20T20:36:39.310 に答える