NSUserDefaults问题(如何在启动应用程序时打开不同的viewController)

时间:2011-07-19 12:28:19

标签: iphone ios nsuserdefaults uiapplicationdelegate

当我没有设置NSUserDefaults中的BOOL时,我正在尝试启动另一个ViewController。 加载“RegistreerView”时,屏幕是否保持白色?我做错了什么?如何在启动应用程序时启动另一个ViewController。

我使用以下代码:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
BOOL *geregistreerd = [defaults objectForKey:@"geregistreerd"];
if(geregistreerd){
    self.window.rootViewController = self.viewController;
} else {
    self.window.rootViewController = self.registreerView;
}

[self.window makeKeyAndVisible];

return YES;
}

4 个答案:

答案 0 :(得分:2)

理论上你可能没有实例化你的笔尖,因为我没有在这个方法的任何地方看到它在上面创建它。如果没有,您可以尝试以下方法:

SomeView *yourView = [[SomeView alloc] initWithName:@"YourViewController" bundle:nil];
self.window.rootViewController = yourView;
[yourView release];

用适当的名称替换SomeViewYourViewController

答案 1 :(得分:1)

检索BOOLNSUserDefaults的方式不正确。您应该使用-(BOOL)boolForKey:(NSString *)defaultName;。您还将geregistreerd声明为指向BOOLBOOL *)的指针,您应在其中声明BOOL,这样可能会导致未定义的行为。
为了显示所需的视图控制器,请确保它们在NIB中正确初始化/分配或正确连接到用户界面。

答案 2 :(得分:0)

objectForKey返回存储在plist中的字符串值。您需要将字符串转换为布尔值。

BOOL *geregistreerd = [[defaults objectForKey:@"geregistreerd"] boolValue];

答案 3 :(得分:0)

根据您的评论,您尚未初始化registreerView变量。实际上应用程序委托中的viewController是通过nib文件初始化的。因此,初始化registreerView变量。

其他部分应该是:

else {
    RegistreerView *registreerView = [[RegistreerView alloc] initWibNibname:@"" bundle:nil];
    self.registreerView = registreerView;
    [registreerView release];
    self.window.rootViewController = self.registreerView;
}

提供适当的笔尖名称。否则将其作为零。