ios - mac - xcode10 new




これは何を意味するのでしょうか? "'NSUnknownKeyException'、理由:...このクラスはキーの値をコードに準拠していませんX" (20)

xibに接続不良がある可能性があります。

私は何度もこのエラーを抱えていました。 この場合、TechZenの答えはまったく正しいですが、別の一般的な原因は、すでにnibのFile's Ownerに接続している.h / .mのIBOutletプロパティの名前変更するときです。

あなたのペン先から:

  1. IBでオブジェクトを選択し、「接続インスペクタ」に移動します。
  2. '参照アウトレット'でオブジェクトがまだ古いプロパティ名に接続されていないことを確認してください。そうであれば小さな 'x'をクリックして参照を削除し、再度ビルドします。

ストーリーボードを使用している場合、別の一般的な原因として、UIButtonに複数の割り当てがある可能性があります(ソリューションはnibの場合とほとんど同じです)。

  1. ストーリーボードを開き、UIButtonを右クリックします。
  2. このボタンに複数のassign / refがあることがわかります。 小さな "x"を持つ "メイン..."グレーのウィンドウの1つを削除します。

私はクラスで作成されたUILabelUILabelをリンクしようとしています。

私のアプリケーションは、次のエラーでクラッシュしています。 これは何を意味するのでしょうか? どうすれば修正できますか?

***キャッチされない例外 'NSUnknownKeyException'、原因: '[<UIViewController 0x6e36ae0> setValue:forUndefinedKey:]:このクラスはキーXXXのコード値に符合しているキー値ではありません。


あなたのビューコントローラがあなたのxibに間違ったクラスを持っているかもしれません。

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

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

'NSUnknownKeyException'、理由: '[<UIViewController 0x3927310> setValue:forUndefinedKey:]:このクラスはキー文字列のキー値に符合しません。'

これは、 UIViewController代わりにSecondViewクラスをUIViewControllerSecondビューコントローラーによって発生します。 正しいクラスに変更すると問題が解決されます。

ところで、Objective-Cでは "string"のような名前を付けるのは悪い習慣です。 それはランタイム命名の衝突を招く。 練習アプリを一度でも避けてください。 命名の衝突は追跡するのが非常に難しく、あなたは時間を無駄にしたくありません。

このエラーのもう1つの理由:あるコントローラから別のコントローラに要素をコピー&ペーストすると、この要素を新しいコントローラに編集して再リンクしても、元のコントローラへのリンクが保持されます。

このエラーのもう1つの理由:

悪いアウトレット。

.hファイルのコンセント名を削除したり、名前を変更したりしています。

.xibまたは.storyboardファイルの接続インスペクタでそれを削除します。


"このクラスはキーのコードに準拠したキー値ではありません"私はちょっと遅かったが、私の答えは違うので投稿する必要があると思うので、間違った方法で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];

私は上記のような答えを見つけられなかったので、同じ問題を抱えている人を助けることができるかもしれません。


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

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

下の画像では、「aRemovedView」の右に感嘆符が表示されています。これは、IBOutletビューオブジェクトがIBにすでに接続されている間に削除したためです。

これは、次のエラーを示します: キャッチされない例外 'NSUnknownKeyException'の理由によるアプリケーションの終了、理由: '[setValue:forUndefinedKey:]:このクラスはキー aRemovedViewに対応するキー値ではありません 。'


これに追加するだけで、私もこのエラーが発生していたからです。 これらの答えをすべて調べてみると、UIやストーリーボードの作業にほとんど当てはまるようです。 オリジナルのポスターはUIで作業していたようですが、このエラーの原因を調べるときには、主にすべての質問が重複として閉じられているか、私のソリューションを追加してください。

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

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

最終的に私はこれらのすべてのsetValue:forKey行をコメントアウトし始めました。そして、私のdefault switch文のcaseがString?ためにうまくsetValue:forKeyましたString?

私は、 String?ようなObjective-C型への直接マッピングがない限り、オプションのswift型をsetValue:forKeyで使うことはできないと最終的に考えましたString? またはNSNumber? 。 私はすべてのCShort?変更してCShort? NSNumber?タイプするNSNumber? それは直接的なマッピングを持っているからです。 Bool? 私の場合、 Boolを使ってfalse初期化するのは良いことでした。 他の人にはその贅沢はないかもしれません。

とにかくうまくいけば頭痛はこれと同様の問題を抱えている人に役立ち、この質問にリダイレクトされ続け、「私はUIで何もしていない!!」

最後にもう一度キー値コーディングがオプションを使用して動作しません。 下に私はどこかを見つけることに終わったが、これを投稿した人にはどこにいるのか忘れて、私はこれを見つけた場所を思い出すと信じていたが、

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

NSObjectから派生したクラス型

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

ブリッジされたスウィフト構造体


これは、デバイス(iPhone)でデバッグするときにだけ私に起こっていました。 iOSシミュレータは正常に動作していました。 Xcodeから "Product-> Clean"を実行すると問題が解決したように見えましたが、理由はわかりません。


これは、私のビューコントローラがもともと.xibファイルを持っていたが、今はプログラムで作成されたときに起こる。

このプロジェクトから.xibファイルを削除しましたが。 ユーザーのiPhone / iPadには、このviewcontroller用の.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];
}

アイデンティティ・インスペクタのView Controllerの「Module」プロパティが、期待したものと異なる場合があります。 また、新しいクラスがターゲットリストに追加されていることを確認してください。


ストーリーボードでこのエラーが発生しました。 上記の解決策は問題ではないようですので、View Controllerを削除して、もう一度追加し直しました(もちろん、Segueを再接続してクラスを再割り当てしていました)。 私はそれが本当に何だったのかわかりませんが、これが始まる少し前に、関連付けられているView Controllerクラスの名前を変更しました。


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

もし、あんたが

  • カスタムビューを持つ
  • @IBInspectableプロパティが追加されました
  • それを後で削除した

次に、次のようなエラーが表示されることがあります。

[あなたのカスタムビュー]でユーザー定義の検査されたプロパティを設定(xxx)できませんでした:...このクラスは、キー[xxx]のキー値コーディングに準拠していません。

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

クラスのIDインスペクタを開き、[User Defined Runtime Attributes]でプロパティ名を選択し、マイナスボタン( - )を押します。


時にはこれはあなたの "Inherit From Target"と関係があります。その値を設定する必要があります。 単一のターゲットアプリケーションでは、Inherit From Targetを選択するだけです。 ターゲットが複数ある場合は、目的のターゲットを選択します。


普遍的なものではなく、iPhone専用アプリケーションの場合は、次のフィールドが空であることを確認してください:

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

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


私の場合、これは誤ったNib:

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

私の場合。 私は、マージ後にxibファイルにアウトレットがないことはありませんでした。

Shift + Command + K

私の問題を解決しました。 私は私のプロジェクトをきれいにして再建した。


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

つまり、問題のUIViewControllerクラスをcmd-clickし、それが 'Targets'タブに含まれていることを再度確認します。


私は、テーブルのカスタムViewCellを実装しようとしていたときにこのエラーが発生しました。 XIBのView Controllerを強調表示し、CellViewの要素に接続すると、「このクラスはキーのコードに準拠したキー値ではありません」というエラーが発生し、これを削除するとエラーがなくなりました。

下の画像の接続を削除してください。

あなたはTable View Cellとの接続だけがあることを確認してください。 テーブルビューのセルをクリックし、INSPECTORをクリックすると、接続を探します。


私はまったく同じエラーメッセージがあり、 http: //www.idev101.comからKiraに感謝(!!)しましたが、私はその課題を解決することができました。 私は彼女のサイトを見つけただけで、これらすべてのスレッドをグーグルでスタックしています。 私は今に来る次のもののためにここに投稿しています、そして、私はその人が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"

あなたの実装(.mファイル)で、たとえば別のUIViewControllerなどを呼び出す場所。

私は私のような初心者のための明白なだけを述べている場合は絶対に残念ではないとこれは正確に質問に関連していないので投票を得ることができますが、私は4(?!?)時間これらのエラーメッセージ。 私はこれを1〜2人に惜しみなく使えば、それは素晴らしいものになるでしょう:)

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

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

私は同じ問題を抱えています。 私はシミュレータをリセットしました。 ボタンコントロールの削除と追加。 そして最後にきれいにしました。 :)スタックオーバーフローのおかげで。 私のコードがどのように大丈夫になり、作業を開始するか


私は複製されたプロジェクトでこの問題を抱え、2つの場所を調べて解決しました:

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

それはいくつかのために動作することを望みます。


私も同じ問題を抱えていましたが、TechZenの答えは本当に素晴らしいかもしれませんが、私の状況に適用するのは難しいと感じました。

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

お役に立てれば。





interface-builder