1. ホーム
  2. ios

[解決済み] IBNSLayoutConstraint という名前のクラスをインスタンス化できませんでした。

2023-04-25 04:55:57

質問

XCode6 betaを使用しており、Swiftを試しています。ビューコントローラにいくつかの自動レイアウト制約を置くと、次のエラーでアプリがクラッシュします。 Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named IBNSLayoutConstraint'

どのように解決するのですか?

このエラーが発生するのは、実行時に削除されるIBOutletに制約を設定したためです。これは、Interface Builderで制約をプレースホルダーに設定したときに起こります。制約が削除されたので、アーカイブを解除しようとすると、それができないというエラーを投げます。

これを修正する方法は 2 つあります。

方法1

  1. ストーリーボード上で右クリック > 開く 名前を付けて開く > ソースコード
  2. 開いたストーリーボードxmlの中から placeholder="YES" .
  3. 実行時に削除されるように設定された制約が見つかります。制約からプレースホルダー属性を削除し、保存して閉じます。
  4. アプリを実行すると、問題が修正されるはずです。

方法 2

  1. Interface Builderで問題の原因となっている制約を見つけます。GUI で Placeholder オプションのチェックを外します。これは、クラッシュの原因となっている ViewController 内の IBOutlet に設定されている制約の 1 つであるはずです。

このような感じになります。

代替

制約を実際にプレースホルダーにしたいと仮定すると、参照するアウトレットをすべて削除する必要があります。これを行うには、プレースホルダにしたい制約を選択します。次に、接続インスペクタ(このように見える、一番右のボタン。(->) を開き、その制約に存在する可能性のある参照アウトレットをすべて削除します。