如果是第一次使用我的应用,我想带我的用户通过帮助向导。我的计划是查找某个密钥的用户默认值。我的问题是在iPhone应用程序中重新路由初始视图的最佳方法是什么?它是否发生在应用代理中? 我必须在第一个视图控制器中重新路由吗?我应该在初始视图的导航控制器中调用setRootView吗?它是在故事板中完成的吗?
我很困惑,想知道是否有这样做的好方法?
我使用IOS 5
非常感谢, 罗斯
答案 0 :(得分:2)
在第一次启动时使用userdefaults键时,最好覆盖AppDelegate中的initialize函数。这将确保用户默认密钥被初始化为正确的值。例如,在我的一个应用程序中,我正在寻找它是否是第一次启动,因为我想向用户显示一个欢迎视图控制器。我使用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:
中,我添加了一个视图控制器作为根视图控制器。我喜欢总是包含一个可靠的“Root View Controller”来进行任何类型的启动视图切换。在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。
答案 1 :(得分:0)
我使用prefs来管理以前是否配置了应用程序(默认情况下是&#39; NO&#39;当然),如果没有,则会出现一个全屏模式对话框,引导用户完成配置。
[tabBarController presentModalViewController:configurationController animated:YES];
这也主要是从app委托进行的,但是如果用户提前中止配置过程等,可以在别处调用,并且效果很好。