【问题标题】:NSUserDefaults Question (how do i open a different viewController when needed while starting the app)NSUserDefaults 问题(如何在启动应用程序时在需要时打开不同的 viewController)
【发布时间】:2011-07-19 12:28:19
【问题描述】:

当 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;
}

【问题讨论】:

  • 您是否在此代码之前实例化reistreerView
  • 对不起,我是 xcode 的新手,所以我不太清楚你的意思。在委托头文件中,我设置了它(也作为属性)。我做了@synthesize。就像一个标准的 Delegate 类在我创建一个新项目时初始化他的 viewController..

标签: iphone ios nsuserdefaults uiapplicationdelegate


【解决方案1】:

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

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

SomeViewYourViewController 替换为适当的名称。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • ok thnx,但这并不能解决我的问题,即使删除整个 if/else 语句并执行 self.window.rootViewController = self.registreerView;屏幕保持白色
      【解决方案4】:

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

      else 部分应该是:

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

      给出适当的笔尖名称。否则将其设为 nil。

      【讨论】:

        猜你喜欢
        • 2021-08-22
        • 2011-10-01
        • 2016-02-18
        • 2012-01-05
        • 2012-01-11
        • 1970-01-01
        • 2017-03-08
        • 1970-01-01
        • 2016-10-04
        相关资源
        最近更新 更多