在第一次运行时加载不同的视图[重复]

Posted

技术标签:

【中文标题】在第一次运行时加载不同的视图[重复]【英文标题】:Load different view on first run [duplicate] 【发布时间】:2013-12-16 20:17:38 【问题描述】:

我目前正在编写一个应用程序,该应用程序需要在第一次运行时加载一个不同的视图,用户可以在其中选择其首选设置。这是代码

实现AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:             (NSDictionary *)launchOptions
 

// Determining Storyboard identifier for first view
// Determining Storyboard identifier for first view
NSString *storyboardID = [self hasEverBeenLaunched]? @"MainView" : @"LoginView";
// Setting proper view as a rootViewController
self.window.rootViewController = [self.window.rootViewController.storyboardinstantiateViewControllerWithIdentifier: @"view45"] ;

然后继续下面的代码:

- (BOOL)hasEverBeenLaunched

// A boolean which determines if app has eer been launched
BOOL hasBeenLaunched;

// Testig if application has launched before and if it has to show the home-login screen        to login
// to social networks (facebook, Twitter)
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"HasAlreadyLaunched"]) 
// Setting variable to YES because app has been launched before
hasBeenLaunched = YES;
 NSLog(@"App has been already launched");
 else 
// Setting variable to NO because app hasn't been launched before
hasBeenLaunched = NO;

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"HasAlreadyLaunched"];
[[NSUserDefaults standardUserDefaults] synchronize];
 NSLog(@"This is the first run ever...");


return hasBeenLaunched;

只是一些简短的说明:视图 45 是初始启动视图,它应该只显示一次,否则主视图控制器在属性下被勾选为初始视图控制器(总是在开始时加载的那个,之后第一次运行)

所以问题是它只加载视图 45,即第一个运行视图,但究竟是什么原因造成的呢?

【问题讨论】:

12 分钟后提出问题?真的吗?!? 【参考方案1】:

问题出在下面一行:

self.window.rootViewController = [self.window.rootViewController.storyboardinstantiateViewControllerWithIdentifier: @"view45"] ;

它忽略了storyboardID 的值,只使用字符串@"view45",所以这就是为什么你每次都会得到相同的值。

如果要修复它,将其更改为以下行:

self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:storyboardID];

您可以看到它现在正在使用 storyboardID 中的值。

【讨论】:

那我该怎么办? 我编辑了我的答案以说明应如何更改代码以将其考虑在内。 更新代码:' // 确定第一个视图的故事板标识符 // 确定第一个视图的故事板标识符 NSString *storyboardID = [self hasEverBeenLaunched]? @"main1" : @"view45"; // 将正确的视图设置为 rootViewController self.window.rootViewController = [self.window.rootViewController.storyboard instantiateViewControllerWithIdentifier:storyboardID] ; ' main1 是普通视图,而 view45 是初始视图。现在出现跳板错误-3,我该怎么办? 我假设这发生在模拟器中。尝试从模拟器中卸载应用程序,关闭模拟器并重新运行应用程序。否则请在真实设备上尝试。

以上是关于在第一次运行时加载不同的视图[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我的简单相机应用程序(android)在第一次尝试后不会加载相机视图

ASP.NET MVC5 每个 Razor 页面在第一次加载时非常慢

具有延迟加载和下载图像的 ListView [重复]

为啥我的 TabBar 按钮在我第一次加载视图控制器时被禁用?

Codeigniter 加载页眉和页脚一次

在第一次加载视图时预选择/突出显示 UICollectionViewCell