4

iPhone アプリを実行してもこのエラーが発生するのはなぜですか? ファイルは、私が削除して置き換えようとしている ViewController ですが、死ぬことはありません。私の知る限り、私のプロジェクトではこのファイルへの参照 (文字列またはその他) はありません。

  • 関連ファイルを削除しました(削除しようとしています。)
  • プロジェクトをクリーンアップして再構築しました。
  • シミュレーターに「コンテンツと設定のリセット」があります。
  • grep (grep -i -r "TheClassName" *) を実行しましたが、UserInterfaceState.xcuserstate ファイル以外は一致しません。
  • XCode の [検索/置換] タブを使用してコードを検索しました。
  • ビルドフェーズを再確認しましたが、そこにないことは確かです (大規模なプロジェクトです)。

他のアイデアはありますか?この単純なことを理解しようとして、私はあまりにも多くの時間を費やしました。私は何かが欠けているに違いない。

ありがとう!

4

6 に答える 6

6

ニブまたはストーリーボードをチェックして、どのビューもクラスに設定されていないことを確認してください!

于 2013-04-09T21:39:29.097 に答える
6

ほぼ2日間にわたって複数のマシンで試した後、最終的に問題を修正しました! 私は邪魔されません!

アプリケーションの初期化時に呼び出される UINavigationController で setViewControllers を呼び出すまで、問題を突き止めました。私は常に 3 つのオブジェクトを渡されていました (ナビゲーション コントローラーには 3 つのペインがあります)。前に説明したように、3 番目のオブジェクトを削除したにもかかわらず、3 つのオブジェクトが常に渡されます。最初の 2 つのクラス タイプは正しいですが、3 番目のオブジェクトは UIViewController になります。不思議なことに、このビュー コントローラーには、以前に削除したオブジェクト ファイルと Xib ファイルに対応する nibName がありました。もちろん、この壊れた UIViewController でビューが呼び出されると、対応するペン先が明らかに削除されているため、クラッシュします。このオブジェクトまたは Xib のテキスト名は、grep を使用してもディレクトリ内に見つかりませんでした。

そのため、アプリが適切にクリーニングされていない可能性があると考えました。私はこれを2回3回チェックしました。ワークスペースの設定が正しいことも確認しました ([ファイル] -> [プロジェクトの設定] -> [詳細])。アプリは確かに毎回新しく再コンパイルされていました。

第二に、オブジェクトが別の手段で設定されているのではないかと考え始めました。逆方向に作業して、いくつかのブレークポイントを追加したところ、親の UINavigationController で initWithCoder が呼び出されていたことがわかりました。これは最終的に、オブジェクトで setViewControllers を呼び出し、3 つのビュー コントローラー (そのうちの 1 つは問題のあるもの) を割り当てていました。コール スタックから、ロードされている Nib ファイルが不適切なものをデシリアライズしていることを簡単に確認できました。

そこで、Xib ファイルを掘り下げ始めました。もちろん、オブジェクト名はファイルにありませんでした (grep で何も見つからなかったため、予想どおり)。ルート UINavigationController を含む Xib の部分を削除して再作成しました。これにより、Xib ファイル内のオブジェクト ID と参照が変更されました。次に、以前に削除したものと同じ名前の新しい Xib と UIViewController を作成しました。これらを作成してから再度削除した場合に Xcode が満足することを期待しています。次に、コンパイルし、それらを再削除し、Xibファイルで再度更新し、grepで再確認しました。はい、実際、その名前には何も存在しませんでした。

そしてそれはうまくいきました。この問題に数日を費やした結果、インターフェイス ビルダーにバグがあることはほぼ確実ですが、バグ レポートを提出するためにこの問題をもう一度確認しますか? 絶対違う...

于 2013-04-10T13:54:24.150 に答える
0

特にフォルダー内でファイルを追加、名前変更、または移動する場合は、ファイルを追加するときに次のことを確認してください。

A. 通常は読み込まない参照ではなく、グループを作成します。

B. ソースを追加する適切な「製品またはターゲット」のボックスをチェックします。

于 2018-10-02T21:15:02.680 に答える