NSUserDefaults 问题(如何在启动应用程序时在需要时打开不同的 viewController)
Posted
技术标签:
【中文标题】NSUserDefaults 问题(如何在启动应用程序时在需要时打开不同的 viewController)【英文标题】:NSUserDefaults Question (how do i open a different viewController when needed while starting the app) 【发布时间】: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..
【参考方案1】:
理论上你可能没有实例化你的笔尖,因为我在上面创建它的这个方法中看不到任何地方。如果没有,您可以尝试以下方法:
SomeView *yourView = [[SomeView alloc] initWithName:@"YourViewController" bundle:nil];
self.window.rootViewController = yourView;
[yourView release];
将SomeView
和YourViewController
替换为适当的名称。
【讨论】:
【参考方案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。
【讨论】:
以上是关于NSUserDefaults 问题(如何在启动应用程序时在需要时打开不同的 viewController)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 NSUserdefaults 为每个启动的对象创建一个密钥
xcode swift:NSUserDefaults:如果退出应用程序,则保存高分并在停止的地方重新启动它