我目前正在为iPhone和iPad开发iOS应用程序。我正在尝试显示一个NavigationController来创建一个显示文件的模块。在iPhone中它工作得很好,但我不能让它在iPad上工作。
我收到以下错误:
'Storyboard (<UIStoryboard: 0x919b200>) doesn't contain a view controller with identifier 'FilesNavigation''
这是代码:
case 10: // Files
{
UINavigationController *navigationController = [storyboard instantiateViewControllerWithIdentifier:@"FilesNavigation"];
FilesViewController *filesViewController = [storyboard instantiateViewControllerWithIdentifier:@"Files"];
[navigationController pushViewController:filesViewController animated:YES];
self.slidingViewController.topViewController = navigationController;
break;
}
在我的故事板中,我已经为导航控制器设置了故事板ID。
>##Custom Class
>Class: UINavigationController
>##Identity
>Storyboard ID: FilesNavigation
我将此代码用于其他模块的开关/外壳块上的另一个案例,它也适用于iPad,这是我第一次出现此错误。
答案 0 :(得分:54)
我明白了,问题是故事板没有在设备中更新。
如@ T0m_Twt在此question
中的答案所述答案 1 :(得分:11)
在右侧窗格的身份检查器部分中,向导航控制器提供故事板ID。
我为你拍了截图
答案 2 :(得分:9)
这是另一个案例:
有两个本地化的故事板。其中只有一个具有您想要的视图控制器。
答案 3 :(得分:1)
偶然的机会,你有iPhone的故事板和iPad的另一个故事板吗?如果你这样做,那么iPad可能没有带有该标识符的故事板。此外,在iPad上运行时,请在代码中设置断点并验证“故事板”对象的内容。
我在UIStoryboard上使用了一个类别,它将为每个平台提供故事板。
我可以使用[UIStoryboard storyboardHome],这将确定它是否需要iPad或iPhone特定并将其返回给我。我还确保我的故事板遵循正确的命名。所以我会有Home_iPad和Home_iPhone。
答案 4 :(得分:0)
TL; DR - 清除所有内容并删除旧版本的应用程序,如果有的话。
这可能听起来很疯狂,但是假设如果您更改了目标名称也改变了包名称,那么您可能在模拟器/设备中安装了新版本的应用程序,这可能会给您带来麻烦。 UIStoryboard
实例无法实例化某些视图控制器,这可能最终导致问题中描述的问题。要解决此问题,您需要删除所有相关应用程序或只是重置模拟器/设备。