2012-02-20 21 views
0

如果第一次使用我的應用程序,我想讓我的用戶通過幫助嚮導。我的計劃是查找某個鍵的用戶默認值。我的問題是在iPhone應用程序中重新路由初始視圖的最佳方式是什麼?它發生在應用程序代表中嗎? 我必須在我的第一個視圖控制器中重新路由嗎?我應該在我的初始視圖的導航控制器中調用setRootView嗎?它是否在故事板中完成?Objective C在第一次使用時更改根視圖

我很困惑,想知道是否有這樣做的好方法?

我使用IOS 5

非常感謝, 羅斯

回答

2

在首次啓動時使用userdefaults鍵時,重寫AppDelegate中的初始化函數是個好主意。這將確保用戶默認鍵被初始化爲正確的值。例如,在我的一個應用程序中,我正在查看它是否是第一次啓動,因爲我想向用戶顯示一個歡迎視圖控制器。我在AppDelegate.m文件中使用以下函數設置它。

+ (void)initialize 
{ 
    if (![[NSUserDefaults standardUserDefaults] objectForKey:@"showWelcome"]) { 

     NSString *mainBundlePath = [[NSBundle mainBundle] bundlePath]; 
     NSString *settingsPropertyListPath = [mainBundlePath 
               stringByAppendingPathComponent:@"Settings.bundle/Root.plist"]; 

     NSDictionary *settingsPropertyList = [NSDictionary 
               dictionaryWithContentsOfFile:settingsPropertyListPath]; 

     NSMutableArray  *preferenceArray = [settingsPropertyList objectForKey:@"PreferenceSpecifiers"]; 
     NSMutableDictionary *registerableDictionary = [NSMutableDictionary dictionary]; 

     for (int i = 0; i < [preferenceArray count]; i++) { 
      NSString *key = [[preferenceArray objectAtIndex:i] objectForKey:@"Key"]; 

      if (key) { 
       id value = [[preferenceArray objectAtIndex:i] objectForKey:@"DefaultValue"]; 
       [registerableDictionary setObject:value forKey:key]; 
      } 
     } 

     [[NSUserDefaults standardUserDefaults] registerDefaults:registerableDictionary]; 
     [[NSUserDefaults standardUserDefaults] synchronize]; 
    } 
} 

– application:didFinishLaunchingWithOptions:我添加視圖控制器作爲根視圖控制器。我喜歡始終包含一個可靠的「根視圖控制器」來執行任何啓動視圖切換。在UIWindow子視圖級別執行此操作可能會有問題。在RootViewController的– viewDidLoad是我檢查密鑰的用戶默認值。

if ([[NSUserDefaults standardUserDefaults]valueForKey:@"showWelcome"] == [NSNumber numberWithBool:YES]) { 
     [self pushViewController:[[WelcomeViewController alloc]init] animated:NO]; 
    } else { 
     [self pushViewController:[[OtherViewController alloc]init] animated:NO]; 
    } 

所有這些都綁回到settings.bundle中的Bool YES/NO開關,它允許用戶在需要時再次看到WelcomeController。

SettingsBundle

+0

謝謝,這是偉大的 – 2012-02-21 00:46:15

+0

很高興我能幫助,當選項變爲可用,這標誌着作爲答案,如果這個解決您的問題:) – MobileOverlord 2012-02-21 00:52:03

0

我使用首選項來管理,如果應用程序已經預先配置的(缺省設置爲「否」,當然),並且如果不存在一個全屏幕模式對話框,引導用戶完成配置。

[tabBarController presentModalViewController:configurationController animated:YES]; 

這也主要是從應用程序的委託完成的,但如果用戶及早中止配置過程等,可以在其他地方調用,它工作得很好。

相關問題