0

2010年のiOS 3のものと同じ古いiOSプロジェクトを開いたところ、起動時にクラッシュすることがわかりました。例外は次のとおりです。

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'This coder requires that replaced objects be returned from initWithCoder:'

原因を突き止めようとして、数時間プロジェクトをいじりました。アプリの大部分をゼロからやり直す以外に、知恵とリソースを使い果たしたと感じています。何が原因であるかについてのアイデアはありますか?

私の調査結果:

このプロジェクトは、AppStore で公開されているものの最新の git チェックアウトです。はい、アプリはシンプルなので、2 年間まったく更新しなくても問題なく動作します。

コンパイルするように変更したのは、ベース SDK を 4.1 (Xcode では使用できなくなりました) から iOS6 に変更し、実行をヒットすることでした。プロジェクト設定のターゲットはまだ 3.0 です。

コードのどこにも initWithCoder を呼び出したり実装したりしていないことを確認しました。示されているコードの行は、main.m の UIApplicationMain() への呼び出しに過ぎず、あまり役に立ちません。

アプリはわずか 3 ビューです。メイン、詳細、および概要。MainView または MainViewController に問題があるようです。1. 起動時に NavigationController に追加しないことを選択します。2.代わりに AboutController を追加することを選択します。

AboutView Xib を使用して MainViewController を初期化し、アプリを起動できるため、コントローラーやビュー コードではなく、Xib ファイルに問題があると思われます。

この Xib を「修正」できるのか、それとも新しい Xib を作成して GUI 要素を再レイアウトする必要があるのだろうか? それが私が恐れている唯一の前進です。アプリは単純ではありませんが、メインの (そして最も密度の高い) ビューを再レイアウトするにはまだ時間がかかります。また、最初からやり直して、ある日また同じ状況に陥る可能性よりも、問題が何であるかを知りたいと思います。

私はまったく正しい軌道に乗っていますか?問題のあるコードまたは GUI ウィジェットを追跡する方法はありますか?

アドバイスをよろしくお願いします。

更新: 新しい Xib で UI の基本を再作成し、それを使用すると、アプリは動作します。いくつかの設定を変更することで古いものを修正できるかどうかをまだ知りたい.

4

2 に答える 2

1

これを引き起こす 2 つの可能性が考えられます。.xib ファイルにフォーマットの問題があるか、この .xib で廃止されたオブジェクトを使用しているため、SDK には .xib が必要とする特定の initWithCoder: メソッドがありません。

Xcode でファイルを書き換えて、おそらく書式設定の問題を修正するには、ドキュメントのバージョンを変更します。Xcode で .xib ファイルを選択し、ユーティリティ ペインのファイル インスペクター タブを表示して、バージョン設定にアクセスします。

別の可能性として、問題のあるオブジェクトの .xib の手動バイナリ検索を実行します。オブジェクトの半分を削除し、アプリを実行します。うまくいった場合は、不良オブジェクトを削除しました。私はあなたがその考えを理解すると確信しています。そのような不良オブジェクトが複数存在する可能性がありますが、かなり迅速に 1 つを見つけ、それを更新する方法を見つけて、他の同様のオブジェクトを修正できるはずです。

于 2012-11-08T16:30:47.553 に答える
1

Swift では、init?(coder aDecoder: NSCoder)イニシャライザ関数が失敗可能であるため ( ?after init で示されるように)、このエラーが発生することもあります。このエラーは、ストーリーボードまたはペン先からオブジェクトを初期化するときに、初期化子が失敗して nil を返す状況でスローされます。

于 2016-08-23T07:30:51.943 に答える