3

ストーリーボードを XIB に置き換えるにはどうすればよいですか?

ビューとそのコントローラーを動的に作成しようとしたときに、新しいストーリーボードのすべての利点を失いました。ここで、プロジェクトから削除しようとすると、独自のコントローラーで新しい XIB を作成し、プロジェクト設定で置き換えました
ここに画像の説明を入力
。アプリケーションを実行しようとすると、クラッシュし、ログに次のように表示されます。

2012-04-08 14:50:16.567 Bazaart[11340:15203] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIApplication 0x8c15c20> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key view.'

これが次のコードです: UIRootWindow:

#import <UIKit/UIKit.h>
@interface UIRootWindow : UIViewController
@end

そしてそれに対応する実装:

#import "UIRootWindow.h"
@implementation UIRootWindow

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    return self;
}
- (void)viewDidLoad {
    [super viewDidLoad];
}
- (void)viewDidUnload {
    [super viewDidUnload];
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
    return YES;
}
@end

編集:
フィリップが提案したウィンドウを作成しました(以下を参照)。しかし...私のやり方は最善ではないようです。私はそれを正しくやっていますか?

UIRootWindow *wnd = [[UIRootWindow alloc] init];
[wnd view];
[self setWindow:wnd.window];
4

2 に答える 2

7

メインインターフェイスフィールドには何も入力しないでください。代わりに、アプリデリゲートのdidFinishLaunchingWithOptions:メソッドにトップレベルのコントローラーをロードし、そこにウィンドウのルートコントローラーを設定します。

アプリケーションの起動は、そこに記載されているxibにUIApplicationであるファイルの所有者がいることを前提としています。(以前のテンプレートはそれを行うために使用され、一部のサンプルプロジェクトは現在も行っています。)

于 2012-04-08T13:12:14.443 に答える
0

アプリの起動時に、設定したクラスの名前に基づいて XIB 内の各コントローラーが作成されます。次に、視覚的に配線した各プロパティが KVC を使用して設定されます。このエラーは、このプロセスのどこかで「view」プロパティが正しくないことを示しています。

これが発生する理由として、次の 2 つが考えられます。

  • ViewController または XIB 内の別のオブジェクト ('Identity Inspector' 内) に適切なクラスが設定されていません。
  • 接続が正しく配線されていません。(「接続インスペクター」で)

どちらの方法でも、プロパティ「ビュー」が接続されている場所に注意して、XIB の設定を簡単に確認できます。

于 2012-04-08T13:14:27.857 に答える