1. ホーム
  2. IOS

IOSラーニングノート「このクラスはxxxのキーバリューコーディングに対応していません」問題解決

2022-02-17 05:55:07

目次

このクラスは、キーのキーバリューコーディングに準拠していません。

1つ目:IBOutletの名前が変わっている、またはInteface Builderで2つ連結されている

2つ目:xibファイルのFile's Ownerに対応するClassファイルが間違っている。

3つ目:AppDelegate


このクラスは、キーのキーバリューコーディングに準拠していません。

学習の過程で、初心者のためにこの問題は確かにこのエラー"このクラスは、キー&quotのキー値のコーディング準拠ではありません発生しますが、オンラインソリューションによると、基本的に唯一の最初の2つの解決策です。

まず1つ目。IBOutletの名前が変わっていたり、Inteface Builderで2つの連結があったりします。

この可能性は高い

2つ目:xibファイルのFile's Ownerに対応するClassファイルが間違っている。

これは、ViewControllerファイルを作成する際に、xibも作成するようにチェックを入れておけば、実は問題ないのですが、以下がチェックポイントになります。

3つ目は AppDelegate

このケースは、初心者にとって最も陰湿なもので、次のようなコードスニペットから始まります。

 
 
#import "AppDelegate.h"
 
@interface AppDelegate ()
 
@end
 
@implementation AppDelegate
 
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    // The last step is to bind the creation of the xib file to the window interface
    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = [[UIViewController alloc]initWithNibName:@"RootViewController" bundle:nil];
    [self.window makeKeyAndVisible];
    return YES;
}
 
 
@end

このコードは、xibレイアウトを使用するためにストーリーボードを削除するときに修正する必要があるものですが、初心者にとっては、これが問題であることを知らないかもしれないし、問題が発生した場合、それは本当に簡単に解決できないし、ここでRootViewControllerをロードするためにUIViewController alloc]initWithNibName: はないだろうと思うでしょうか。問題はありませんが、それは問題を引き起こしている:&quot。 このクラスはキーバリューのコーディングに準拠していないため、キー これは、システムの UIViewController ではなく、RootViewController を初期化する必要があるためで、すべての ViewController のトップレベルの親となるため、コードを次のように変更するだけです。

 
 
#import "AppDelegate.h"
 
@interface AppDelegate ()
 
@end
 
@implementation AppDelegate
 
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    // The last step is to bind the creation of the xib file to the window interface
    self.window = [[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = [[RootViewController alloc]initWithNibName:@"RootViewController" bundle:nil];
    [self.window makeKeyAndVisible];
    return YES;
}
 
 
@end

UIViewControllerをRootViewControllerに変更します。