Objective C在首次使用时更改根视图

时间:2012-02-20 23:21:11

标签: iphone objective-c ios5

如果是第一次使用我的应用,我想带我的用户通过帮助向导。我的计划是查找某个密钥的用户默认值。我的问题是在iPhone应用程序中重新路由初始视图的最佳方法是什么?它是否发生在应用代理中? 我必须在第一个视图控制器中重新路由吗?我应该在初始视图的导航控制器中调用setRootView吗?它是在故事板中完成的吗?

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

我使用IOS 5

非常感谢, 罗斯

2 个答案:

答案 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。

SettingsBundle

答案 1 :(得分:0)

我使用prefs来管理以前是否配置了应用程序(默认情况下是&#39; NO&#39;当然),如果没有,则会出现一个全屏模式对话框,引导用户完成配置。

[tabBarController presentModalViewController:configurationController animated:YES];

这也主要是从app委托进行的,但是如果用户提前中止配置过程等,可以在别处调用,并且效果很好。