1

基本的に、何度も作成する予定のビューのテンプレートとして、nib ファイルとビュー コントローラーを使用したいと考えています。このペン先には、いくつかのラベルとカスタム ビューがあります。アイデアは、オブジェクトの配列を反復処理し、それぞれに対してこのコントローラーのインスタンスを作成し、配列のオブジェクトのプロパティにプロパティを設定するというものです。

現時点では、setStringValue: を呼び出したときにラベルが更新されないことを除いて、これはすべてうまく機能します。

ビュー コントローラーのコード内でメソッドを使用して変更を加えていますが、うまくいきません。カスタム ビューが完全に接続されているため、IBOutlet が適切に接続されていないと推測されます。

何か案は?

4

3 に答える 3

1

awakeFromNibにブレークポイントを設定し、デバッガーでラベルアウトレットの値を確認します。awakeFromNibが呼び出される前に、すべてのコンセントが接続されている必要があります。それでもゼロの場合は、答えがあります。setStringValue:on nilを呼び出すと、まったく「何も」行われません。その場合、アウトレットを正しくバインドしていないか、一度正しくバインドして後で名前を変更した可能性があります。その場合、Xcode4またはInterface Builderに、何かが間違っていることを示す黄色の警告三角形が表示されます。ただし、アプリのビルドや実行を妨げることはありません。アウトレットは、オブジェクトの作成後も初期値(nil)を保持するだけです。

于 2011-03-17T01:38:28.787 に答える
0

NSViewControllersを割り当てるときは、NIBという名前で初期化します。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
于 2011-03-17T01:39:24.883 に答える
0

返信ありがとうございます。役に立ちましたが、私が得ていたものではありませんでした。空のNIBを作成し、カスタムNSViewと他のいくつかのコントロールだけで埋めることで、最終的に解決しました。これらのコントロール用に IBOutlets を使用して NSView サブクラスを作成し、インターフェイス ビルダーでカスタム ビューの ID をサブクラスに設定しました。描画するたびにそれを機能させる秘訣は、ペン先をロードして希望どおりに設定されたビューを返すクラスメソッドをサブクラスに作成することでした。

以下のコード:

+(id)todoViewFromNibWithFrame:(NSRect)frameRect todoList:(TodoList *)aTodoList
{
    NSNib *todoViewNib = [[NSNib alloc] initWithNibNamed:@"TodoView" bundle:nil];
    NSArray *objects = nil;

    id todoView = nil;

    [todoViewNib instantiateNibWithOwner:nil topLevelObjects:&objects];
    for (id object in objects) {
        if ([object isKindOfClass:[self class]]) {
            todoView = object;
            [todoView setTodoList:aTodoList];
            break;
        }
    }

    [todoViewNib release];
    return todoView;
}

返信ありがとうございます。スティーブ

于 2011-03-18T04:52:46.517 に答える