iOS - 使用目标的访问类方法

时间:2017-08-31 06:00:08

标签: ios xcode targets

我有以下代码:

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

3 个答案:

答案 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文件。如果故事板不在那里,请单击+按钮添加该文件。清洁并运行。希望它有所帮助。