【问题标题】:Missing proxy for identifier UIStoryboardPlaceholder [duplicate]缺少标识符 UIStoryboardPlaceholder 的代理 [重复]
【发布时间】:2012-11-13 14:33:56
【问题描述】:

您好,我在开发故事板应用程序时似乎偶然发现了奇怪的事情。

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

Missing proxy for identifier UIStoryboardPlaceholder

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

*** 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”。知道可能出了什么问题吗?

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

【问题讨论】:

  • 我在 iOS 7 设备上遇到了同样的崩溃。当我将恢复 ID 分配给故事板视图控制器(根选项卡栏控制器的选项卡)时,它开始,该控制器在单独的 xib 中具有其视图。如果我将视图移到情节提要上,一切都很好。

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


【解决方案1】:

我们遇到了同样的问题:故事板文件中的视图控制器,其接口在单独的 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 ))时,应用程序因相同的“缺少代理”和“不符合键值编码关键的sceneViewController”错误。

我们的解决方案是我们在经历了很多挫折的试错式调试之后发现的,只是确保故事板文件中视图控制器的故事板 ID 不是 与类名相同

当我们将 Storyboard ID 从“TestViewController”重命名为“testViewController”(唯一的区别是小写首字母)时,一切正常……

奇怪?你打赌,但现在一切似乎都正常了。

【讨论】:

  • 我认为“确保故事板文件中视图控制器的故事板 ID 与类名不同”的想法很棒:)。
  • 它也适用于我!救了我的神经,非常感谢!
  • 小写命名为我解决了这个问题。感谢您的提醒。可悲的错误信息,他们显然可以更好地识别问题!
  • 绝对的天才,非常感谢分享!
  • 即使在该类的一个 VC 中设置 Storyboard ID,即使故事板中同一 VC 的其他实例没有任何 Storyboard ID,也可能发生此问题,这毫无意义。
【解决方案2】:

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

【讨论】:

  • 感谢您的回答。不幸的是,我确实尝试过,但没有帮助。
【解决方案3】:

我在从 .xib 文件转换为情节提要的应用程序中遇到了同样的错误。我的应用包含一个 UITabBarController,点击某些选项卡会触发错误。

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

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

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

【讨论】:

  • 实际上你可以有一个故事板视图控制器,它的视图带有单独的 xib。只需使用视图控制器类的名称命名您的 xib 文件,例如MyViewController.xib.
  • @vladim - 我正在尝试按照您的建议进行操作,文档说您可以,但这就是导致此错误的原因。
【解决方案4】:

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

到目前为止,解决这个问题的唯一方法是不使用我重构的 .xib(从容器视图中断开它)。

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

仅供参考 - 以下是我在尝试从错误中恢复时采取的一些失败步骤(在放弃和恢复快照之前)。
1. 清理构建。
2、iOS模拟器中删除App。
3.删除自定义ViewController.xib中的所有视图。
4. 将自定义 ViewController 命名为其他名称。
5. 在 Storyboard 中,向 ViewController 添加一个空白视图,表示我的自定义 Viewcontroller 类。 这有效并允许我的应用运行,但是我的自定义类既不能加载自己的视图来代替这个默认的空白视图,也不能在使默认的空白视图透明时看到它自己的视图。调试显示我的自定义类 .xib 视图在分配给 self.view 时为零。

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

【讨论】:

  • 感谢您的洞察力。我现在也会小心重构。不幸的是,我无法恢复到之前的任何状态,因为我不记得我是否使用了该功能并且这会产生问题并且同时进行了很多更改。我只是在真机上测试,没有遇到任何问题
【解决方案5】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多