我有以下代码:
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyViewController" bundle:nil];
UINavigationController *navControllerInstance = [storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([MyViewController class])];
当我使用目标时,我的问题[MyViewController class]
正在返回"MyTarget_2.MyViewController"
,然后我的应用崩溃,因为"'Storyboard (<UIStoryboard: 0x600001e65d80>) doesn't contain a view controller with identifier "
我有两个目标: MyTarget 和 MyTarget_2 ,只是失败了。
我不明白为什么 [MyViewController class] 正在返回 的 MyTarget.MyViewController 即可。当我开始一个新项目时,这不会发生,只返回 MyViewController 。为什么会有这样的差异?
这似乎是相关的,因为我使用的是swift + objective-c Calling NSStringFromClass on a Swift Class in Objective-C returns module mangled name
答案 0 :(得分:0)
你可以得到这样的类名:
NSString *className = [[NSStringFromClass([MyViewController class]) componentsSeparatedByString:@"."] lastObject];
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MyViewController" bundle:nil];
UINavigationController *navControllerInstance = [storyboard instantiateViewControllerWithIdentifier:className];
并确保您的故事板ID应为MyViewController
答案 1 :(得分:0)
您是否在故事板中为您的ViewController提供了标识符?
您可以在ViewController的标识Inspector部分中针对Storyboard ID提供它。
因为,
UINavigationController *navControllerInstance = [storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([MyViewController class])];
方法处理标识符而不是类名
答案 2 :(得分:0)
我认为您还没有将特定的故事板复制到目标中。你可以验证它。点击目标。然后在构建阶段 - &gt;复制捆绑资源。检查两个目标中是否存在storyboard文件。如果故事板不在那里,请单击+按钮添加该文件。清洁并运行。希望它有所帮助。