在应用程序中使用多个故事板的最佳方式

我目前正在开发一个将使用多个故事板的应用程序,如下所示:

1)login.storyboard(处理注册和login)

2)main.storyboard(处理游戏选项和select)

3)settings.storyboard(处理游戏设置)

4)game.storyboard(实际的游戏)

我目前在NSUserDefaults中testing一个会话标记,如果存在的话,加载main.storyboard,否则auth.storyboard使用:

NSUserDefaults *tagDefaults = [NSUserDefaults standardUserDefaults]; if (![tagDefaults objectForKey:@"session_token"]) { NSLog(@"session token not found"); NSString *storyboardId = @"nonauth"; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"login" bundle:nil]; UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:storyboardId]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = initViewController; [self.window makeKeyAndVisible]; } else { NSString *storyboardId = @"init"; UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"init" bundle:nil]; UIViewController *initViewController = [storyboard instantiateViewControllerWithIdentifier:storyboardId]; self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.rootViewController = initViewController; [self.window makeKeyAndVisible]; } 

从login屏幕,如果login返回是有效的我使用这个从我的NSURLSession完成处理程序从login.storyboard切换到main.storyboard:

  UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"main" bundle:nil]; UINavigationController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"main"]; self.view.window.rootViewController = viewController; 

我的两个问题是:A)这是实施这个的正确方法吗? B)在main.storyboard实际加载(20-30秒的延迟)之前,从login.storyboard执行切换之后,会有相当的延迟,有没有办法加速或改进代码以避免这种延迟?

提前致谢。

Ĵ

  1. 不要更改根视图控制器。 没有必要。 一个应用应该有一个根视图控制器的整个生命周期的应用程序。 如果你想完全用视图控制器的视图来replace界面,那么就出现这个视图控制器。 一个呈现的视图控制器可以出现,只是呆在那里的应用程序的整个生命周期的其余部分。 (实际上,如果login界面是比较less见的界面,将主界面作为主界面,将login界面放在主界面上更为合理)。

  2. 同样,不需要同时使用login故事板和主要故事板。 这些界面集可以在同一个故事板上,所以不需要加载新的故事板。

我倾向于模态地呈现login风险投资。 我总是加载主要的VC。 如果没有会话令牌存在,那么我模态地呈现loginVC没有animation。 实际上,这使得它看起来好像在启动时login视图一样。 一旦用户成功login,您可以忽略典型的模式解除(从屏幕底部掉落)或做一些交叉淡入淡出的操作。

对于故事板,我个人使用多个。 如果你有一个不平凡的应用程序,SB中的视图数量可能会变得相当大。 pipe理起来可能会很困难 – 在意见海中find你想要的是烦人的和耗时的。 此外,它使我的机器陷入可怕的境地。 也许最重要的是,如果你在一个拥有源码控制的团队(你绝对应该使用这个团队)上工作,那么试图pipe理访问这个单一的SB是非常烦人的。 如果多个开发人员修改单个SB,通常不可能合并更改。 至less有多个你可以分配不同的人到不同的任务,这是每个绑定到自己的SB。 有多个SB(只有实例化视图占用内存)没有性能优势。 但从发展效率的angular度来看,这是有好处的。