【发布时间】:2012-01-31 14:18:11
【问题描述】:
我有一个奇怪的问题:
当您没有明确指定 nibName 时,UIKit 使用什么模式来确定 UIViewController 的正确 nib 名称?
我为什么要问?
因为我认为(有充分的理由)系统会首先寻找与控制器类同名的 nib。
也就是说,如果我有VideoViewController,系统会先查找VideoViewController.xib。
显然情况并非如此。
我还有另一个类VideoView,它是UIView 的子类。我有一个名为VideoView.xib 的笔尖,其中包含VideoView 的所有视图层次结构。
当我尝试运行该应用程序时,它会立即崩溃并出现setValue:ForUndefinedKey 异常。
我注意到密钥始终是来自 VideoView.xib 的密钥,而 not 来自VideoViewController.xib。这意味着系统正在尝试为名为@987654333@ 的视图控制器加载VideoView.xib。
似乎如果系统会找到一个名称与控制器类名称相似的 nib - 只是没有“Controller”后缀,它将使用该 nib。
我通过将我的班级重命名为VideosViewController(带有's')确认了这一点,一切正常。
还有像这样的边缘条件吗? 或者有没有指定具体算法的地方?
我花了一个小时来调试这个,我不想在以后再浪费时间在同样的问题上......
谢谢!
【问题讨论】:
标签: iphone ios cocoa-touch uiviewcontroller uikit