XCode6ベータ版を使用して、Swiftを試しています。 View Controllerに自動レイアウト制約を設定すると、アプリが次のエラーでクラッシュします:Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
実行時に削除されるIBOutletに制約を設定したため、このエラーが発生しています。これは、Interface Builderで制約をプレースホルダーに設定すると発生します。制約は削除されているため、アーカイブを解除しようとすると、それができないというエラーがスローされます。
これを修正するには2つの方法があります。
placeholder="YES"
。これは次のようになります。
実際に制約をプレースホルダーにしたい場合、参照しているアウトレットを削除する必要があります。これを行うには、プレースホルダーにしたい制約を選択します。次に、接続インスペクター(右端にある(->)のようなボタン)を開き、その制約に存在する可能性のある参照アウトレットを削除します。
私は今、同じ問題を抱えていて、次のことがうまくいきました。
私は自分のアプリの作業バージョンをApp Storeにリリースし、数日後にUITabBarControllerのタブをタップしてエラーでクラッシュしました:
Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'
知っているプレースホルダーレイアウト制約や、定義されるべきではない制約アウトレットはありませんでした。
私にとっての解決策は、サイズクラスを単にオフにして、iPhoneのサイズクラスデータを保持することでした(アプリはiPhone専用です)。これは、サイズクラスで見逃していたものをすべて削除したに違いありません。サイズクラスが必要なため、それらを再び有効にすると、アプリが再び動作しました。
サイズクラスの使用に問題がありました。ストーリーボードプロパティからそのオプションを無効にし、自動レイアウトのみを使用しました。アプリはiPhoneのみなので、それほど大きな問題ではありませんでした。
最終的に私に起こったのは、Interface Builder内でサブビューをカットして別のxibにコピーしたことです。これにより、元のxib Interface Builderのサブビューがグレー表示されたままになりました。サブビューを元の場所から削除した後(選択して削除することにより)。エラーを取り除くことができました。
「自動レイアウトを使用」と呼ばれるインスペクタの「インスペクタを表示」の下にある制約を使用しないxibファイルを選択すると、インスペクタウィンドウにオプションがあります。
Stackoverflowの別の場所で見つかったソリューションを使用して、スクロールビューに埋め込まれたピッカーコントロールが適切に機能するように、スクロールビューを変更しました。私の新しいストーリーボードは、単にこれらの属性をスクロールビューに追加しましたが、それは私には問題ないと思われました。
delaysContentTouches="NO" canCancelContentTouches="NO"
しかし、さらに、ストーリーボードで別のシーンの次の新しいフラグメントを見ました。
<variation key="default">
<mask key="subviews">
<exclude reference="86H-aM-wei"/>
</mask>
</variation>
どこから来たのか分かりません。開発マシンですべてが機能しているように見えたため、最初は無視しました。しかし、ビルドがリリースとしてビルドされ、テストされると、クラッシュしました。そのスプリアス(?)フラグメントを削除すると、クラッシュが修正され、他に影響を与えることはないようです。
カスタムUICollectionViewCellにボタンがあり、そのクラスのIBOutletsとしていくつかの制約があったときに、この問題が発生しました。セルから親View Controllerにボタンを移動しましたが、IBOutletsはまだセル内で参照されていましたが、実際にはセル上に存在しなかったため、すべてが爆発しました。それらのIBOutletsを削除するだけで、すべて正常に機能しました!