2011-03-17 14 views
1

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

これはすべて、現時点では1つのことを除いてうまく動作します。setStringValue:を呼び出すと、ラベルは更新されません。

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

アイデア?

答えて

0

は、ちょうどNIBの名前でINIT:回答について

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
1

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

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; 
} 

ありがとう! スティーブ

関連する問題