如果第一次使用我的應用程序,我想讓我的用戶通過幫助嚮導。我的計劃是查找某個鍵的用戶默認值。我的問題是在iPhone應用程序中重新路由初始視圖的最佳方式是什麼?它發生在應用程序代表中嗎? 我必須在我的第一個視圖控制器中重新路由嗎?我應該在我的初始視圖的導航控制器中調用setRootView嗎?它是否在故事板中完成?Objective C在第一次使用時更改根視圖
我很困惑,想知道是否有這樣做的好方法?
我使用IOS 5
非常感謝, 羅斯
如果第一次使用我的應用程序,我想讓我的用戶通過幫助嚮導。我的計劃是查找某個鍵的用戶默認值。我的問題是在iPhone應用程序中重新路由初始視圖的最佳方式是什麼?它發生在應用程序代表中嗎? 我必須在我的第一個視圖控制器中重新路由嗎?我應該在我的初始視圖的導航控制器中調用setRootView嗎?它是否在故事板中完成?Objective C在第一次使用時更改根視圖
我很困惑,想知道是否有這樣做的好方法?
我使用IOS 5
非常感謝, 羅斯
在首次啓動時使用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。
我使用首選項來管理,如果應用程序已經預先配置的(缺省設置爲「否」,當然),並且如果不存在一個全屏幕模式對話框,引導用戶完成配置。
[tabBarController presentModalViewController:configurationController animated:YES];
這也主要是從應用程序的委託完成的,但如果用戶及早中止配置過程等,可以在其他地方調用,它工作得很好。
謝謝,這是偉大的 – 2012-02-21 00:46:15
很高興我能幫助,當選項變爲可用,這標誌着作爲答案,如果這個解決您的問題:) – MobileOverlord 2012-02-21 00:52:03