2012-02-02 6 views
4

私は現在コントローラのinitメソッドでNSMutableArrayの1つのエントリを初期化するコントローラ(MVCデザインパターン)を介してNSTableViewを設定しています。NSTableViewに入力する方法は?

はどのようになります。

  1. は人の列が
  2. オブジェクトである私NSMutableArrayのを移入私の代わりに私の基本クラスの私のmainViewDidLoad方法でNSMutableArrayのを移入する必要がありますか?私はこれのための例やリソースが見つかりませんでした。

モデル(Person.m)

#import "Person.h" 


@implementation Person 

@synthesize name; 
@synthesize gender; 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     name = @"Bob"; 
     gender = @"Unknown"; 
    } 

    return self; 
} 

- (void)dealloc 
{ 
    self.name = nil; 
    self.gender = nil; 

    [super dealloc]; 
} 

@end 

コントローラ(PersonController.m)

#import "PersonController.h" 
#import "Person.h" 


@implementation PersonController 

- (id)init 
{ 
    self = [super init]; 
    if (self) { 
     PersonList = [[NSMutableArray alloc] init]; 
//  [personList addObject:[[Person alloc] init]]; 
//   
//  [personTable reloadData]; 
    } 

    return self; 
} 

- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { 
    return [personList count]; 
} 

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row { 
    Person *person = [personList objectAtIndex:row]; 
    NSString *identifier = [tableColumn identifier]; 

    return [person valueForKey:identifier]; 
} 

- (void)dealloc 
{ 
    [super dealloc]; 
} 

@end 

ベースファイル(Main.h):

#import "Main.h" 

@implementation Main 

- (void)mainViewDidLoad 
{ 

} 

@end 

答えて

3

にはどうすればいいでしょう:作成したPersonオブジェクト:

  • 人の列が

ステップ1オブジェクトである私NSMutableArrayのを移入します。

ステップ2:あなたはおそらく(例えば、その名前を設定する)あなたがそれを設定したい場合には、別途者を作成する必要がありますが、Add them to the array.

あなたのコメントアウトコードは、まさにこれを行います。

私の基本クラスのmainViewDidLoadメソッドの代わりにNSMutableArrayを設定する必要がありますか?

あなたが作成したモデルを見ているユーザーがどれだけ遠いのかは、実際には問題ではありませんが、概念的には、それは私の匂いです。それはビューとは関係ないので、それはinitに属していると言います。

もちろん、メインビューとその中のすべてのビューが既にロードされている場合は、配列に加えた変更を表示するにはtell the table view to reload your dataが必要です。逆に、ビューをロードする前にモデルを作成した場合は、最初にモデルビューを表示しているため、最初にリロードする必要はありません。

1

お手数ですが、PersonControllerのあなたのコメントアウトされたコードは正しく見えます。私はNSTableRowが正しい識別子を持っていると仮定しています。唯一の問題は、人物のオブジェクトが空白であるため、表示する文字列がないことです。私は起こっていたことは、あなたの行が最初の行にnilを表示しようとしていて、代わりに空の文字列を表示していたことです。 personオブジェクトの作成、名前フィールドと性別フィールドの設定、そしてNSMutableArrayへのputとreloadDataの呼び出し(実際は表示するためにいくつかの実際のデータを提供することを除いて、コメント付きコードは基本的に何をしますか?

+0

申し訳ありませんが、私は自分のイニシャライザーコードを含めるべきでした。わかりやすくするために、Person.hをPerson.mに置き換えたときの更新を参照してください。 – Coderama

0

まあ、私はあなたのコントローラがインターフェイスビルダーにバインドされているIBOutlet NSTableView * personTableプロパティを持っていると仮定していますか?

また、コントローラのインターフェイスでは、プロトコルを宣言する必要がありますが、コントローラの実装には適切なメソッドがあるため、これも正しく設定されていると仮定しています。

もう1つの詳細は、テーブルの列の識別子がインターフェイスビルダーで正しく設定されているかどうかです。この例から、列識別子がPersonのプロパティ(名前と性別)にどのように関係しているかはわかりません。配列personListはディクショナリのオブジェクトが人であるディクショナリオブジェクトを保持すべきではなく、ディクショナリのキーはインタフェースビルダーで設定したカラム識別子にマップされますか?

さらにもう1つのテクニカルでは、プロパティ名(PersonList)は大文字で始めるべきではありません。コンパイラはpersonListを取得しようとすると、小文字のpを使用して少なくとも抗議する必要があります。

関連する問題