作为“年轻的iOS padawan”,我有以下愚蠢的问题要求 -
在Xcode 5中,我创建了an iPhone app storyboard(包含导航控制器,管理其他3个视图控制器)和AppDelegate.m中的以下代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc1 = [storyboard instantiateViewControllerWithIdentifier:@"Master"];
//UIViewController *vc2 = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
UIViewController *vc3 = [storyboard instantiateViewControllerWithIdentifier:@"User"];
User *user = [User load];
NSArray *controllers = (user ? @[vc1, vc3] : @[vc1]);
UINavigationController *nc = (UINavigationController *)self.window.rootViewController;
[nc setViewControllers:controllers];
return YES;
}
我的问题是:,因为在上面的代码中使用了self.window.rootViewController
,这意味着应用已经加载了Main.storyboard文件,并且VC已“冻结”在其中已被实例化,对吗?
这是否意味着,当我致电instantiateViewControllerWithIdentifier时,会创建每个VC的第二个副本?
当我在应用程序的源代码中设置/更改VC上的属性时,故事板管理的VC不受影响(但仍会显示给用户)?
答案 0 :(得分:1)
应用已加载Main.storyboard文件
是
当我调用instantiateViewControllerWithIdentifier时,会创建每个VC的第二个副本
是的,如果视图控制器在根导航控制器内,否则没有(因为应用程序应该没有理由加载它们)。因此,对于主视图控制器是,对于用户视图控制器,则为no。
稍后在VC上设置/更改属性
这实际上取决于代码
故事板是一个容器,用你的话说,是“冻结”(真正存档的)视图控制器和视图。您的代码不会更改故事板内容,它只是在不同的时间根据不同的触发器加载归档的不同部分。从Storyboard存档创建这些元素后,您可以修改它们,但这是基于您的代码的运行时修改。