缺少标识符UIStoryboardPlaceholder的代理

时间:2012-11-13 14:33:57

标签: objective-c ios storyboard ios-simulator ios5.1

嗨,我在制作故事板应用程序时似乎偶然发现了奇怪的事情。

我的应用程序在启动画面后立即停止,在控制台中我收到错误消息:

Missing proxy for identifier UIStoryboardPlaceholder

现在,如果我尝试让应用程序继续运行,我会在控制台中收到新消息,我认为这与第一条错误消息有问题有关[/ p>

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason:
 '[<IntroViewController 0x6e35f40> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key sceneViewController.

奇怪的是,只有在使用iOs 5.1 Simulator时才会出现此错误。它在iOs 6模拟器上以及在具有iOs 6和iOs 5.1的设备上都能正常工作

我试图找到答案,但谷歌说它找不到UIStoryboardPlaceholder这个词的任何结果,更不用说整个错误信息了。我确定,我的xcode项目中没有“UIStoryboardPlaceholder”这个词(甚至不在nib文件中),也没有提到'sceneViewController'。知道什么可能是错的吗?

编辑:我试图重置模拟器和清理项目,但无济于事

5 个答案:

答案 0 :(得分:25)

我们遇到了同样的问题:故事板文件中的视图控制器,其接口在单独的XIB文件中定义。 (使用Xcode 6.3.1,iOS 8.3和Swift 1.2。)

我们正在使用Swift,因此我们将@objc()声明添加到类声明中:

@objc(TestViewController) class TestViewController: UIViewController

我们可以使用self.storyboard?.instantiateViewControllerWithIdentifier( "TestViewController" )从另一个视图控制器中实例化视图控制器,但是在呈现视图控制器时(使用self.presentViewController( viewController, animated: true, completion: nil )),应用程序崩溃了相同的&#34;缺少代理&#34;和&#34;不是关键的值编码兼容的关键sceneViewController&#34;错误。

我们的解决方案是我们在经过类似试验和审核错误的调试后发现的,只需确保故事板文件中的视图控制器故事板ID 与班级名称相同

当我们从&#34; TestViewController&#34;重命名故事板ID时to&#34; testViewController&#34; (唯一不同的是小写的第一个字母),一切正常......

奇怪?你打赌,但现在一切似乎都在起作用。

答案 1 :(得分:6)

我遇到了同样的问题。尝试清理项目并恢复模拟器。

答案 2 :(得分:3)

我在使用.xib文件转换为故事板的应用程序时遇到了同样的错误。我的应用程序包含一个UITabBarController,点击某些选项卡会触发错误。

在我的情况下,问题是我将视图控制器复制到故事板中,该故事板使用“NIB名称”属性从外部.xib文件加载视图控制器的视图。故事板视图控制器不支持从.xib文件加载视图,因此我的故事板包含一个没有视图的视图控制器。

我打开了外部.xib文件,复制了视图,将其粘贴到我的故事板中的相应视图控制器中,并确保粘贴的视图是故事板场景中的视图控制器的下级(缩进)。然后我将视图重新连接到视图控制器中的插座。

当我重新运行应用程序时,错误消失了。

答案 3 :(得分:1)

将我添加到列表中。在一个类“重构 - 重命名”之后我得到了这个错误。我正在重命名的类是一个自定义的ViewController,它有自己的.xib。我使用Storyboard启动一个包含“容器视图”的viewController,它在启动时嵌入了我的自定义ViewController。

到目前为止,唯一的出路是不要使用重构的.xib(从容器视图中断开它)。

我的半解决方案:
我已经从之前的工作快照恢复了我的应用程序,并从头开始创建一个新的自定义ViewController和.xib而不是重构。将它连接到Storyboard,我再次收到错误消息。清理了构建并从模拟器中删除了应用程序并重新运行,然后它神奇地运行而没有错误。 出于这个原因,我相信Xcode中存在一个带有Refactor-Rename的错误,它会破坏幕后的一些故事板文件。一旦我确认新的.xib附加到storyboard没有错误,我将类代码复制/粘贴到新的自定义viewController类中,并按照您的预期完成将类对象重新连接到.xib的过程。跑吧,一切都还行。

仅供参考 - 以下是我尝试从错误中恢复时(在放弃和恢复快照之前)采取的一些失败步骤。
1.清洁构建。
2.在iOS模拟器中删除应用程序 3.删除自定义ViewController .xib中的所有视图 4.将自定义ViewController命名为其他内容 5.在Storyboard中,向ViewController添加一个空白视图,表示我的自定义Viewcontroller类。 这样可以让我的应用运行,但是我的自定义类既无法加载自己的视图来代替此默认空白视图,也无法在默认空白视图透明时显示自己的视图。调试显示我的自定义类.xib视图在分配给self.view时为nil。

我目前正在避免Xcode的重构 - 重命名具有.xib的文件。

答案 4 :(得分:0)

我有同样的错误,终于解决了。 我的问题是我有:

[[storyboard instantiateViewControllerWithIdentifier:@"TripDetail"] methodThatDoesNotExist:@"param"]