13

こんにちは、絵コンテアプリの開発中に奇妙なことに遭遇したようです。

スプラッシュ画面の直後にアプリが停止し、コンソールに次のエラー メッセージが表示されます。

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 シミュレーターで作業している場合にのみ発生します。iOS 6 シミュレーター、および iOS 6 と iOS 5.1 の両方を搭載したデバイスでも正常に動作します。

私は答えを見つけようとしましたが、グーグルは、エラーメッセージ全体は言うまでもなく、UIStoryboardPlaceholderという単語の結果が見つからなかったと言います。私は、xcodeプロジェクト内のどこにも「UIStoryboardPlaceholder」という言葉がなく(nibファイル内でさえ)、「sceneViewController」について言及されていないことを確認しました。何が間違っているのでしょうか?

編集:シミュレーターとクリーニングプロジェクトをリセットしようとしましたが、役に立ちませんでした

4

5 に答える 5

27

同じ問題がありました。別の 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 がクラス名と同じではないことを確認することでした。

ストーリーボード ID の名前を「TestViewController」から「testViewController」に変更したところ (最初の文字が小文字になっているだけです)、すべてがうまくいきました…</p>

変?あなたはきっと、すべてがうまくいっているようです。

于 2015-05-19T11:52:06.237 に答える
6

私も同じ問題を抱えていました。プロジェクトをクリーンアップして、シミュレーターを復元してみてください。

于 2012-11-13T20:09:37.083 に答える
1

私をリストに加えてください。クラスで「リファクタリング - 名前の変更」を行った後、このエラーが発生します。名前を変更するクラスは、独自の .xib を持つカスタム ViewController です。起動時にカスタムViewControllerが埋め込まれた「コンテナビュー」を含むviewControllerを起動するStoryboardを使用します。

これまでのところ、これを回避する唯一の方法は、リファクタリングされた .xib を使用しないことです (コンテナー ビューから切断します)。

私の半解決策:
以前の作業スナップショットからアプリを復元し、リファクタリングの代わりに新しいカスタム ViewController と .xib を最初から作成しました。Storyboard に接続したところ、エラー メッセージが再度表示されました。ビルドをクリーンアップし、シミュレーターからアプリを削除して再実行すると、魔法のようにエラーなしで実行されました。 このため、Refactor-Rename を使用した Xcode にはバグがあり、バックグラウンドでストーリーボード ファイルが破損していると思います。 新しい .xib がエラーなしでストーリーボードにアタッチされていることを確認したら、クラス コードをコピーして新しいカスタム viewController クラスに貼り付け、クラス オブジェクトを .xib に再接続するプロセスを実行しました。それを実行しても、すべてが機能しました。

参考までに - エラーから回復しようとして失敗した手順の一部を次に示します (スナップショットをあきらめて復元する前に)。
1.ビルドのクリーニング。
2. iOS シミュレーターでアプリを削除します。
3. カスタム ViewController .xib 内のすべてのビューを削除します。
4. カスタム ViewController に別の名前を付けます。
5. Storyboard で、カスタム Viewcontroller クラスを表す ViewController に空のビューを追加します。 これは機能し、アプリを実行できましたが、カスタム クラスは、このデフォルトの空白のビューの代わりに独自のビューを読み込むことができず、デフォルトの空白のビューを透明にしたときに独自のビューも表示されませんでした。デバッグすると、self.view に割り当てられたときに、カスタム クラスの .xib ビューが nil であることが示されました。

私は現在、.xib を持つファイルに対して Xcode の Refactor-Rename を避けています。

于 2012-11-25T02:19:00.063 に答える