1. ホーム
  2. ios

[解決済み】Xcode - 'NSUnknownKeyException', reason: ... this class is not key value coding-compliant for the key X" エラーの修正方法とは?

2022-01-22 20:01:30

質問内容

をリンクさせようとしています。 UILabelIBOutlet 私のクラスで作成したものです。

私のアプリケーションは、次のようなエラーでクラッシュしています。

これはどういうことでしょうか?

どうすれば直るのですか?

<ブロッククオート

*** キャッチできない例外 'NSUnknownKeyException', reason: '[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for key XXX.' によりアプリを終了する。

解決方法は?

ビューコントローラーのクラスが、xibの中で間違っている可能性があります。

プロジェクトをダウンロードしました。

あなたが得ているエラーは

'NSUnknownKeyException', reason: '[<UIViewController 0x3927310> setValue:forUndefinedKey:]: このクラスはキー文字列に対してキーバリューコーディングに準拠していません'.

によって引き起こされます。 Second ビューコントローラを MainWindow.xib のクラスを持つ UIViewController ではなく SecondView . 正しいクラスに変更すると、問題は解決します。

ちなみに、Objective-Cで"string"のような名前をつけるのはバッドプラクティスです。ランタイムの命名衝突を招きます。たとえ一度限りの練習用アプリであっても、避けるようにしましょう。ネーミングの衝突を追跡するのは非常に困難で、時間を無駄にしたくありません。

このエラーのもう1つの考えられる理由は、あるコントローラから別のコントローラに要素をコピー&ペーストする際に、Xcodeが何らかの形で元のコントローラへのリンクを保持し、その要素を新しいコントローラに編集&再リンクした後でも、そのリンクが保持されることです。

このエラーのもう一つの可能な理由。

アウトレットが悪い。

あなたはどちらかを持っています。 削除 または リネーム でアウトレット名を指定します。 .h ファイルを作成します。

で削除します。 .xib または .storyboard ファイルのコネクションインスペクタを表示します。

もう一つ考えられる理由

(私の場合) バインド可能なプロパティを持つUIViewを拡張し、それらのバインド可能なプロパティ(すなわち、影、角の半径など)に値を設定した後、UIView拡張からそれらのプロパティを削除しますが、(何らかの理由で) 次のようなことが起こります。 <userDefinedRuntimeAttributes> はxmlに残っています。 foo.storyboard ):

<userDefinedRuntimeAttributes>
  <userDefinedRuntimeAttribute type="color" keyPath="shadowColor">
      <color key="value" white="0.0" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="shadowOpacity">
      <real key="value" value="50"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="point" keyPath="shadowOffset">
      <point key="value" x="5" y="5"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="shadowRadius">
      <real key="value" value="16"/>
  </userDefinedRuntimeAttribute>
  <userDefinedRuntimeAttribute type="number" keyPath="borderWidthValue">
      <real key="value" value="0.0"/>
  </userDefinedRuntimeAttribute>
</userDefinedRuntimeAttributes>

解決策 を右クリックしてください。 foo.storyboard ソースコードとして開く > keyPathで検索(例:shadowRadius) > 削除する。 </userDefinedRuntimeAttributes> 問題の原因となる