Xcode-'NSUnknownKeyException'を修正する方法、理由:…このクラスは、キーX "エラーのキー値コーディングに準拠していませんか?


1172

私はリンクしようとしているUILabelIBOutlet私のクラスで作成されました。

アプリケーションが次のエラーでクラッシュします。

これは何を意味するのでしょうか?

どうすれば修正できますか?

***キャッチされない例外 'NSUnknownKeyException'によりアプリを終了しています。理由: '[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:このクラスは、キーXXXのキー値コーディングに準拠していません。


11
pedrotorresは正しいです。はい、そうです。UITableViewCellを実行している場合は、IBでファイルの所有者をNSObjectに、UITableViewCell'Classを定義した.hクラスに必ず作成してください。
ジュゼッペ2013年

3
このような問題が発生し、問題のキーがアウトレットではなくアクションである場合、アウトレット変数名ではなくアクション関数名を誤って参照するアウトレットがある可能性があります。
Alex Yursha 2015年

2
エラーメッセージのキーの名前(OPはこれを「XXXX」と呼んでいます)は、nibファイルで何かに付けた名前であることに注意してください。これで検索を絞り込むことができます。
クリス2015

私はrdar:// 22105925を提出し、ビルド時にこれらのエラーをより明確にするようAppleに依頼しました。:)
jtbandes 2015

実際に問題をすぐに解決する方法! stackoverflow.com/a/13812660/294884素晴らしいヒント
Fattie

回答:


980

ビューコントローラーのxibに間違ったクラスがある可能性があります。

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

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

'NSUnknownKeyException'、理由: '[<UIViewController 0x3927310> setValue:forUndefinedKey:]:このクラスは、キー文字列のコーディングに準拠したキー値ではありません。

代わりにのクラスを持つSecondビューコントローラーが原因です。正しいクラスに変更すると、問題が解決します。MainWindow.xibUIViewControllerSecondView

ちなみに、Objective-Cで「string」のような名前を付けるのは悪い習慣です。実行時の名前の衝突が発生します。一度限りの練習アプリでもそれらを避けてください。衝突の命名は追跡が非常に難しく、時間を無駄にしたくない場合があります。

このエラーの別の考えられる理由:あるコントローラーから別のコントローラーに要素をコピーして貼り付ける場合、この要素を編集して新しいコントローラーに再リンクした後でも、Xcodeは何らかの形でそのリンクを元のコントローラーに保持します。

このエラーの別の考えられる理由:

悪いコンセント。

あなたはどちらかいる削除または名前を変更し、あなたにコンセントの名前を.hファイル。

ファイル.xibまたは.storyboardファイルの接続インスペクタで削除してください。

もう1つの考えられる理由

(私の場合)バインド可能なプロパティとそれらのバインド可能なプロパティの値を設定した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>問題の原因となっているものを削除


9
また、nibの「ビュー」アウトレットをファイル所有者のビューアウトレット(UIViewControllerから継承したカスタムクラスのビューアウトレット)に接続することを忘れないでください。これは、「Place Holders」の下の「File's Owner」から「Objects」の下の「view」にコントロールをドラッグし、ビューアウトレットを選択することで実行できます。
Nirma

1
私はすべてのクラスがすでに設定されていることを確認しましたが、NSUnknownKeyExceptionはまだ出てきます:(
Zennichimaro

1
Interface Builderを使用していませんが、まだこのエラーが発生します。何が起こっているのでしょうか?
sudo 2014年

12
気にしないで。それは2つの理由によるものでした。プロジェクトから削除されたにもかかわらず、Xcodeがメインストーリーボードにアクセスし続け、シミュレーターがキャッシュしました。ストーリーボードやNIBを使用することはあまりお勧めしません。それらは途方もなく問題があります。
sudo 2014年

5
@ジョシュロル。xcodeでネイティブアプリを作成するモチベーションを上げるたびに、何をするかを理解するために1日を費やすことになります。私はac#devなので、最近XamarinとTelerik(nativescript)の製品を検討しています。
マフィンマン

1524

xibの接続が悪い可能性があります。

このエラーは何度も発生しました。この場合、TechZenの答えは完全に正しいですが、別の一般的な原因は、nibのファイルの所有者にすでに接続している.h / .mのIBOutletプロパティの名前変更した場合です。

あなたのペン先から:

  1. IBでオブジェクトを選択し、「接続インスペクタ」に移動します。
  2. [Referencing Outlets]で、オブジェクトが古いプロパティ名にまだ接続されていないことを確認します。接続されている場合は、小さな「x」をクリックして参照を削除し、再度ビルドします。

    ここに画像の説明を入力してください

ストーリーボードを使用している場合のもう1つの一般的な原因は、UIButtonに複数の割り当てがある可能性があります(解決策はnibの場合とほぼ同じです)。

  1. ストーリーボードを開き、UIButtonを右クリックします
  2. このボタンには複数の割り当て/参照があることがわかります。小さな「x」が付いた「メイン...」の灰色のウィンドウの1つを削除します。

    例2


1
ありがとう!私の場合、同じビューに2つのアウトレットがあり、古いものを取り除き、ビューを新しいものに接続すると例外が終了しました。
Mark Patterson

私は2回複製されました。Proバージョン(Liteバージョン)からドラッグアンドドロップした後、他のプロジェクトの接続にぶら下がっていると考えて、それぞれを切断し始めました。重複に遭遇し、切断するのに3回のクリックが必要だったとき、3日早くそれができればと思っていました。まあ、それは開発者の人生です。
aremvee 2016年

UIButtonに複数の割り当てがあるという問題がありました。これで私の問題は解決しました。
mythicalcoder

私もこの問題を抱えていました。スーパービューだけでなく、特定のビューでコンセント接続を確認することを忘れないでください。私の場合、スーパービューに間違った接続が表示されていなかった= /
アウグストカルモ

GUIを使用してページがまだ作成されていない誤ったViewController swiftファイルにボタンアウトレットを接続すると、同様のエラーが発生しました
brw59

114

このエラーを取り除くには、シミュレーター/ iPhoneからアプリを削除する必要がありました。


1
+1これで解決しました。IBを使用するコードをクリーンアップしていました。コードからボタンを削除すると、nibファイルでこのボタンがまったく参照されていなくても、エラーがポップアップし続けました(少なくとも私は確認できました)。
2012

2
たまたま同じ名前の2つのアプリケーションをデバッグしている場合、これが必要だと思います。
アントン

はい、XIBから何かがシミュレーターにキャッシュされているようです。古いアプリを実際に削除する必要がないので、アップグレードをテストしている場合は面倒です。
Carlos P

XIBファイルの削除でこの問題が発生しました。これで問題が解決しました。
バルボア2014年

4
アプリを削除しても機能しない場合は、XCode DerivedDataフォルダーを削除してみてください。不正なxibファイルをキャッシュする可能性があります。XCode-> Preferences-> Locations-> DerivedDataフォルダーを開き、ゴミ箱にドラッグします。
Philip Fung、2015

107

テーブルにカスタムViewCellを実装しようとしたときに、このエラーが発生しました。XIBのViewコントローラーを強調表示し、CellViewの要素に接続すると、「このクラスはキーのコーディング値に準拠していない」というエラーが発生したため、これらを削除するとエラーが解消されました。

下の画像の接続を削除します。 ファイル所有者が強調表示されているときにインスペクターで接続を削除する

テーブルビューセルとのみ接続していることを確認してください。チェックするには、テーブルビューのセルをクリックし、INSPECTORで接続を探します。

テーブルビューセルが強調表示されている場合、接続はここにあるはずです


4
これでうまくいきました。ありがとうございました。左側の列で[ファイルの所有者]が選択されたときに接続を解除し、カスタムセルを選択して再接続しました。成功!
Rogare 14

xcode7でもこれは機能します。右側のパネルの「接続インスペクタ」を使用してください。アウトレットをテーブルビューセルとラベルから削除し、再度追加すると、すべてが機能するはずです。
lifeisfoo

3
これは機能しますが、FileOwnerが設定されていないことを確認する必要があります!! ファイルの所有者はNSObjectのままにしておく必要があります。 stackoverflow.com/questions/13793162/...
devjme

同じ答えで二度救われました!
wm.p1us

98

時々、これは「ターゲットから継承」に関係していることがあります。その値を設定する必要があります。シングルターゲットアプリでは、[ターゲットから継承]を選択するだけです。複数のターゲットがある場合は、目的のターゲットを選択します。

ここに画像の説明を入力してください


この回答は、特定のケースで役立ちました。複数のターゲットを持つ古いobj-cプロジェクトで作業を続ける必要があります。SwiftでカスタムUITableViewCellを作成しましたが、同じエラーが発生しました。「ターゲットから継承」を有効にすることで機能しました。ありがとうございました!
magohamoth

モジュールは常に正しく設定されているとは限りません。たとえば、実際にクラスを作成する前にクラス名を入力するとします。
Johan

最後に「Enter」キーを押さずにクラス名を入力したので、IDEはこのフラグを自動的にチェックしませんでした。これで1時間を無駄にしました。ありがとうございました。
MatPag 2018

obj-cでこのタイプのエラーが発生したことはありません。しかし、その謎を解決したおかげで。
Pradeep Kachhawaha

なぜこれが3ページ目に埋め込まれているのですか?
セルジオ

65

ユニバーサルアプリではなく、iPhoneのみのアプリの場合は、次のフィールドが空であることを確認してください。

ターゲット>概要> iPhone / iPod導入情報>メインインターフェイス

そこにxibを指定すると、クラッシュします。


2
うん、それは私にとってそれでした。新しいスタートアップビューコントローラーを追加するためにあちこちに移動しながら、これを新しいclass / nibに設定しました。ビューアウトレットを接続した後、このエラーが発生しました。このフィールドをクリアすると修正されました。
ひどい

これでうまくいきました。古いバージョンを機能させるには、デバイス/シミュレータからも削除する必要があったことに注意してください。
2012年

ありがとう-これは私の問題でした。iPadストーリーボードファイルの名前を変更し、プロジェクトの設定で更新しませんでした。
RobertJoseph

2
ありがとうございました!これで解決しました。(メインインターフェイスのフィールドを空に変更した後、シミュレーターからアプリを削除する必要がありました。そのフィールドを変更するだけでは、シミュレーターはキャッシュを強制的に破壊しませんでした。)
2013

ユニバーサルアプリからiphone専用アプリに変更したことを思い出し、エラーが修正されました。
ジャスティン

59

このエラーは、すでに接続されているInterface Builder オブジェクトが削除/名前変更されたことを示していますその所有者のソース(ファイルの所有者)で。

感嘆符が表示されている場合は、Interface Builderでファイルの所有者をControl キーを押しながらクリックして、修正する必要があります。

次の図では、「aRemovedView」の右側に感嘆符が付いていることがわかります。これは、IBにすでに接続されているときにIBOutletビューオブジェクトを削除したためです。

ここに画像の説明を入力してください

これにより、次のエラーが発生します:キャッチされない例外 'NSUnknownKeyException'によりアプリを終了します。 理由: '[setValue:forUndefinedKey:]:このクラスは、キー aRemovedViewのコーディングに準拠したキー値ではありません


ありがとうございました!これで修正されました。私は長い間この問題を抱えており、ゼロからやり直す以外に修正方法を知りませんでした。これはそれで、ビューコントローラーからIBOutletsを削除しましたが、所有者でまだ参照/リンクされていることを知りませんでした(この場合、インターフェイスビルダーの「View Controller」-Xcode 6)。
Ira Herman

41

同じ問題があり、TechZenの答えは確かに素晴らしいかもしれませんが、自分の状況に適用するのは難しいと感じました。

最終的に私は、ファイル所有者ではなく、オブジェクト(下の画像で強調表示されている)の下にリストされているコントローラーを介してラベルをリンクすることで問題を解決しました

お役に立てれば。

ここに画像の説明を入力してください


37

私の場合は、ストーリーボードのソースコードのエラーです。次の手順に従ってください。

  1. 最初にストーリーボードをソースコードとして開きます
  2. 検索する <connections>
  3. 不要な接続を削除する

例えば:

<connections>
    <outlet property="mapPostsView" destination="4EV-NK-Bhn" id="ubM-Z6-mwl"/>
    <outlet property="mapView" destination="kx6-TV-oQg" id="4wY-jv-Ih6"/>
    <outlet property="sidebarButton" destination="6UH-BZ-60q" id="8Yz-5G-HpY"/>
</connections>

ご覧のとおり、これらはコード変数の名前とストーリーボードレイアウトxmlタグの間の関係です;)


33

ここに画像の説明を入力してください ここに画像の説明を入力してください

私の修正はGerard Grundyのものに似ていました。XIBを使用してカスタムUITableViewCellを作成する際、誤ってカスタムクラス名をUITableViewCellではなくファイルの所有者に適用しました。キャンバス上のUITableViewCellにクラスを適用し、それにIBOutletプロパティを接続すると、問題が解決しました。


Ayyy dag nab it ...私がどれほど頻繁にこの間違いを犯したか信じられない。ありがとうlol
ベンジャミン

31
  1. 指定する必要があるのはIBOutlet1回だけですIBOutlet。ラベル、ivarは不要です。
  2. を使用してNIBをインスタンス化していますUIViewControllerか?ある時点であなたは電話する必要があります[SecondView initWithNibName:@"yourNibName" bundle:nil];

これは役に立ちました!別のビューコントローラーからプロパティに関するKey-Valueコーディングコンプライアンスエラーが発生しました。-initWithNibName間違ったペン先名で電話していたことがわかりました。
jlstrecker

これはあまりにも私を助けてはい..私はのUIViewControllerの代わりMyCustomeViewControllerを使用していた..しかし、これは一種の階層問題の..です内省があるためミス置いクラスオブジェクトの失敗することができる。..とにかくありがとう
フューチャー

同様の問題がありました。偶然に2つの同一のIBActionエントリ。コードには表示されず、UIControl(私の場合はUIStepper)の右クリックでのみ表示されました。1つ削除するだけで修正されました。
デイブハバード

30

これは、デバイス(iPhone)でデバッグしているときにのみ起こりました。iOSシミュレータは問題なく動作していました。Xcodeから「製品->クリーン」を実行すると問題が解決したようですが、なぜなのかわかりません。


これは私の問題を解決します。tsk2xほぼ3日間の頭痛。
user3818576

5
質問に対する回答を提供します。何かがNibでめちゃくちゃになり、クリーンを行うことで解決しました。私は上記のすべてを読んで役に立たないように試み、それからクリーンアップを行い、1時間それを修正しようとした後、Majのソリューションで修正しました。XMLの何が原因であるかを知りたいと思っていましたが、先に進みました。
LevinsonTechnologies

これは確かに問題を解決します-私は上記の多くの提案を試みましたが、突然発生し始めたこのエラーをプロジェクトが完全に修正しました。Ugg ...
DustinB

これで問題が解決しました。上記の提案をたくさん試しました。奇妙に思われる!
Naveen Shan、2015

23

私は完全に同じエラーメッセージとhttp://www.idev101.comからKiraに感謝(!!)がありました、問題を解決することができました。私は彼女のサイトを見つけたのは、これらすべてのスレッドをグーグルで重ねた後だけでした。StackOverFlowに来る次の問題についてここに投稿します。その人はおそらくGoogle経由でこのスレッドにアクセスするので、私が抱えていたのと同じ課題があります。

私は間違ってこれを作ったことに気づきました:

UIViewController *deviceViewController = [[UIViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

これの代わりに:

DeviceViewController *deviceViewController = [[DeviceViewController alloc] initWithNibName:@"DeviceViewController" bundle:nil];

どこ

DeviceViewController

私のクラスの名前としても知られていました

DeviceViewController.h 
DeviceViewController.m

あなたはする必要があります

"import DeviceViewController.h"

たとえば、別のUIViewControllerを呼び出す実装(.mファイル)内。

私のような初心者のために明白なことだけを言っていて、投票に反対する可能性があるので質問に正確に関連していないので、私は絶対に残念ではありませんが、私はこれらのエラーメッセージの答えを今すぐ4(?!?)時間探していました。私がこれを1人または2人に割くことができるなら、それは素晴らしいことです:)

PS:他のUIViewControllerをロードするためにコードがどのように続くかに興味がある人のために:

    [self presentViewController:deviceViewController animated:YES completion:nil];

すべての手順をありがとう、私はXcode 5を使用していて、デフォルトではストーリーボードしか追加できないため、手動でnibを追加する方法がわかりませんでした。本当に役に立ちました!
2013年

「私が間違ってこれを作った...」おかげで、この本当に愚かな間違いのために私が多くを費やすのは初めてではありません
tontonCD

23

コントロールをドラッグしてアウトレットまたはアクションを作成し、それを削除するのを忘れたことが原因である可能性があります。コードを削除した場合でも、十分なcmd + Zを作成した場合でも、ストーリーボードの接続インスペクターに移動して、作成したアクションまたはアウトレットがまだここにあるかどうかを確認する必要があります。


ありがとう!私はXcodeのn00bで、不正なリンクを見つけるのにしばらく時間がかかりました。Xcode 9.2では、ストーリーボードビューで要素を右クリックして、[参照アウトレット]を確認できます。
国頭

21

他の回答を見直すと、このエラーを引き起こす可能性のあることがたくさんあるようです。もう1つあります。

もし、あんたが

  • カスタムビューがある
  • @IBInspectableプロパティを追加
  • その後、それを削除しました

次に、次のようなエラーが発生する場合があります

[Your Custom View]でユーザー定義の検査プロパティ(xxx)を設定できませんでした...:このクラスは、キー[xxx]のキー値コーディングに準拠していません。

解決策は、古いプロパティを削除することです。

ここに画像の説明を入力してください

クラスのIDインスペクターを開き、[ユーザー定義のランタイム属性]でプロパティ名を選択し、マイナスボタン(-)を押します。


私はこのページに頻繁にアクセスしました...今回はこのソリューションで成功しました!しかし、奇妙なことに、削除する古いプロパティは、クラッシュしたプロパティからではなく、実際には別のViewControllerにあったので、なぜかわかりません。
Cinn

15

これは、ビューコントローラーに元々.xibファイルがあったときに発生しますが、現在はプログラムで作成されています。

このプロジェクトから.xibファイルを削除しましたが。ユーザーのiPhone / iPadには、このビューコントローラーの.xibファイルが含まれている場合があります。

.xibファイルをロードしようとすると、通常、このクラッシュが発生します。

Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x18afe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key welcomeLabel.'

プログラムで作成するときの解決策は次のとおりです:

-(void)loadView {
    // Ensure that we don't load an .xib file for this viewcontroller
    self.view = [UIView new];
}

12

Identity InspectorのView Controllerの「Module」プロパティは、予想と異なる場合があります。また、新しいクラスがターゲットリストに追加されていることを確認してください。


私の場合はそうだったので投票しました。私はSwiftとStoryboardsを使用しています。(ビルドバリアントを作成するために)新しいビルドターゲットを作成すると、アプリは新しいバリアントで機能しませんでしたが、最初のものが正常に機能しました。アプリは、最初のターゲットからモジュール名が何らかの方法でモジュールに設定されたビューコントローラーでクラッシュしましたが、作業中のビューコントローラーではCurrent-<モジュール名>でした。この場合、そこでモジュール名を消去する必要があります。
Mixaz

11

2つのターゲット(独自のMainWindow XIBを使用)があるプロジェクトでも同様の問題がありました。このエラーの原因となった根本的な問題は、UIViewControllerクラスが2番目のプロジェクトのリソースリストに含まれていないことでした。つまり、インターフェイスビルダーでMainWindow.xibに指定できましたが、実行時にシステムがクラスを見つけることができませんでした。

つまり、問題のUIViewControllerクラスをcmdキーを押しながらクリックし、[ターゲット]タブに含まれていることを再確認します。


9

これを追加するだけです。私もこのエラーを受け取っていたからです。これらすべての答えを検討することは、UIやストーリーボードに関する作業に最も当てはまるようです。私は元のポスターがUIで機能しているように見えたのを知っていますが、このエラーの考えられる理由を検索すると、ほとんどすべての質問がこの質問に戻り、他の人が重複して閉じているか、ストーリーボードの接続に問題があるだけなので、私のソリューションを追加します。

私はSwift 2でWebサービスのコーディングに取り組んでいました。必要なプロキシオブジェクトとスタブをすべて構築しました。返されたXMLをループ処理するときに、オブジェクトを動的にインスタンス化NSObjectsetValue:forKeyていました。これらはすべて、それらのオブジェクトから取得されて使用されていました。setValue:forKeyプロパティを設定しようとするたびに、このエラーが発生しました。

私は、例えば(私が扱った各タイプのswitch文を持っていましたBool?CShort?String?)と各XMLノードのために私はを経て、型がオブジェクトにあったし、その型に値を変換し、それを設定しようとしましたものを確認しましたsetValue:forKey

最終的に私はこれらすべてのsetValue:forKey行をコメントアウトし始めて、私のdefaultswitchステートメントのケースがString?

またはのようなObjective-C型への直接マッピングがない限り、オプションのSwift型をで使用できないことをついに理解しました。直接マッピングがあるため、すべてのタイプをに変更することになりました。以下のために私の場合にはそれだけで使用することに私のために大丈夫だったし、それを初期化しますsetValue:forKeyString?NSNumber?CShort?NSNumber?Bool?Boolfalse。他はその贅沢を持っていないかもしれません。

とにかく、これが同じように問題を抱え、この質問にリダイレクトされ続け、「UIで何もしていない!!」

最後に、もう一度繰り返しますが、オプションではKey-Valueコーディングが機能しません。以下で私はどこかを見つけましたが、どこにこれを投稿したかを忘れてしまい、謝罪しました。私がこれを見つけた場所を覚えていれば、それは私の人生を救いました。

KVCはCocoa / Objective-Cであり、Objective-CはOptional Intを認識できないため、Optional IntプロパティでKVCを使用することはできません-Objective-Cにブリッジされていません。Objective-Cは、Objective-Cにブリッジされているタイプのみを表示できます。

NSObjectから派生したクラス型

@objcで公開されるクラス型

ブリッジされているSwift構造体


1
Cocoaバインディングを介してSwiftブール値を接続しようとしている場合は、@ objcディレクティブで公開する必要があります。そうしないと、実際にこのエラーが発生します。これが最良の答えです。
jvarela

9

「このクラスはキーのキー値コーディングに準拠していません」少し遅れてわかっていますが、答えが異なるため、投稿する必要があると思います。2つ目のコントローラーを間違った方法でプッシュしていました。ここにサンプルがあります

コントローラーをプッシュする方法が間違っている

UIViewController* controller = [[UIViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

正しい方法

TempViewController* controller = [[TempViewController
 alloc]initWithNibName:@"TempViewController" bundle:nil];
         [self.navigationController pushViewController:controller animated:true];

上記のような答えは見つからなかったので、同じ問題を抱えている人に役立つかもしれません


8

これは、名前を変更または削除したXib Interfaceからコンポーネントを参照する場合です。再参照は私にとってはうまくいきます。


8

私は複製したプロジェクトでこの問題を抱えていて、2つの場所をチェックすることで解決しました:

1-リストに.mファイルがあることを確認します->プロジェクト-ビルドフェーズ-ソースのコンパイル
2-その後、インターフェイスビルダーに移動し(おそらくこれはIBのみでエラーが発生します)、すべてのプロパティ、ラベル、画像のリンクを解除します、など...その後、すべてを再リンクします。私は属性を削除したことに気付きましたが、それはまだIBでリンクされていました。

それがうまくいくことを願っています。


7

私が見つけたもう1つの「準拠していない」問題は、なんらかの理由でクラスの2つのコピーをなんとか持っていたときでした。

間違ったコピーにキーを追加していました。Interface Builderはまだキーを確認してそれらに接続させましたが、実行時に新しいキーを持たないクラスの別のコピーを使用していました。

「正しい」コピーを見つけるために、XCodeのcmdキーを押しながらクラス名を別の場所でクリックして、正しいコピーにジャンプし、次に、未使用の不良コピーを削除しました(未使用のコピーから編集内容を最初に持ち出した後)。

話の教訓:重複するクラスファイルは不適切です。


7

このエラーは別のものです!

ここで私はそれを修正した方法です。私はxcodeバージョン6.1.1を使用していて、swiftを使用しています。アプリがセグエを実行して次の画面にジャンプしようとするたびに、このエラーが発生しました。ここで私がしたこと。

  1. ボタンが正しいアクションに接続されていることを確認しました(これは問題ではありませんでしたが、それでも確認してください)。
  2. ボタンに、誤って作成した可能性のある追加のアクションまたはアウトレットがないことを確認します。(これは問題ではありませんでしたが、それでも確認してください)
  3. ログを確認し、次の画面のすべてのボタンが正しい動作をしていることを確認します。セグエがある場合は、一意の識別子があることを確認してください。(これが問題でした)
    • セグエの1つに一意の識別子がありませんでした
    • ボタンの1つには、誤って作成したアクションと2つのアウトレットがありました。
    • 追加のアウトレットをすべて削除し、次の画面のセグエに一意の識別子があることを確認します。

乾杯、


6

私も同じ症状でした。根本的な原因は、私のソースファイルの「ターゲットメンバーシップ」が正しいターゲットに設定されていないことでした。私のクラスはビルドされず、アプリに含まれないことを意味します。

それを修正するには:

  1. .mファイルを強調表示します。
  2. 右側のペインで、ファイルインスペクタを選択します。
  3. [ターゲットメンバーシップ]セクションで、適切なビルドターゲットがオンになっていることを確認します。

これが誰かの役に立つことを願っています。


6

問題を引き起こしているIBOutletsを持つカスタムUIViewControllerサブクラスがある場合、実際にエラーを取り除くために見つけた唯一の一連のステップは

.1クラスをUIViewControllerに変更する

.2すべてのコンセントの接続を外します(すべて黄色の警告三角形が表示されます)-問題のあるコンセントを外すだけで十分な場合があります。

.3すべての標準手順を実行-↑⌘K、派生データの削除(祈りのマット、心配ビーズ)

.4アプリを起動-問題のあるシーンに移動します。

.5アプリを強制終了し、Interface Builderに戻って、クラスをカスタムクラス名に戻します。

.6コンセントを再接続します。

アプリを起動します。これにより、通常、Key-Valueコンプライアンスの問題が解消されます。


これは、ストーリーボードエディターでシーンをコピーして貼り付けるときに機能しました。
Mizmor

5

私の場合。マージ後、xib-filesにアウトレットがなくなっていませんでした。

Shift + Command + K

私の問題を解決しました。私はプロジェクトをクリーンアップして再構築しました。


4

私の場合、これは間違ったNibを参照したことが原因でした。

BMTester *viewController = [[BMTester alloc] initWithNibName:@"WrongNibName" bundle:nil];

1
ビューコントローラーのクラスの名前を変更し、nib名も変更する必要があることを忘れたとき、私に起こります。nib名は単なる文字列なので、コンパイラエラーはありません。
クリス2015

3

ストーリーボードでこのエラーが発生していました。上記の解決策は問題のように思われなかったので、結局、それを修正したビューコントローラーを削除して、再び追加しました(そしてもちろん、セグエを再接続してクラスを再割り当てしました)。実際には何なのかはわかりませんが、これが始まる少し前に関連するビューコントローラクラスの名前を変更したので、おそらく何かがホースされていました。


もう一度このエラーが発生しました。今回は、クラスが割り当てられた新しい空のテーブルビューコントローラーを作成し、機能していないものはそのままにして、セグエをそれに移動しました。これはうまくいきました。次に、失敗するまで、ビューのすべての要素をゆっくりとコピーしました。今回の問題は、ピッカーにいくつかの「ユーザー定義ランタイム属性」を割り当てたことであることが判明しました(それらを使用してピッカーを初期化できるため、コードで実行する必要がないと考えていました。それが可能かどうかはわかりません。 )。これを削除すると問題が解決しました。このエラーは本当に恐ろしいものです。将来のリリースで改善されることを願っています!
対称の

3

同じ問題が発生しました。シミュレータをリセットしました。ボタンコントロールの削除と追加。そして最後にきれいにした。:)スタックオーバーフローのおかげで。私のコードがどうやって問題なく動作し始めたのか。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.