0

にいくつかのメソッドを追加するクラスカテゴリがありましたUIViewController。カテゴリにインスタンス変数を追加する必要があったので、それをカスタムUIViewControllerサブクラスに変換し、インスタンス変数を追加しました。次に、UIViewController表示していたものを新しいサブクラスのインスタンスに変換しました。

UIViewControllerアプリケーションのロード時に新しいものをロードするのに問題があります。私は私のペン先からビューコントローラーをロードしますAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        self.viewController = [[ATFIPresentationViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil];
    } else {
        self.viewController = [[ATFIPresentationViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible]; //Crashes Here
    return YES;
}

makeKeyAndVisibleその後、アプリケーションのウィンドウを呼び出すと、例外がスローされます。

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

ここで、basicPickerはにIBOutletですUITextField。これはIBOutlet、viewControllerで定義したすべての場合に発生します。viewControllerをのサブクラスのサブクラスにUIViewControllerすると、ペン先からの読み込みが妨げられるのはなぜですか?ペン先の「ファイル所有者」はViewControllerであり、ではありませんATFIPresentationViewController

編集:まあ、私はこれを「適切な」そしてより少ないタイピングの重い方法で動作させることを試みることにうんざりしました。拡張機能をNSObjectに変換し、UIViewControllerを渡すことで機能するようになりました。誰かが見てみたいと思ったら、私はこれを使っていたものをgitHubに投稿しました。

4

1 に答える 1

0

このエラーは、nibが名前のプロパティを持たないクラスのインスタンスに値を設定しようとしているために発生していますbasicPicker。これは、間違ったタイプのオブジェクトにメッセージを送信していることを確実に示しています。

File's Ownernibファイル内ののクラスを、デフォルトのUIViewControllerだけでなく、作成した新しいUIViewControllerサブクラスに設定する必要があります。ペン先で選択File's Ownerすると、右側のパネルの[ユーティリティ]の3番目のタブで、右上にあるXcodeのIdentityInspectorという名前で変更できます。

于 2012-08-12T22:32:45.757 に答える