Objective-C, Cocoaアプリ
こんにちわ。初歩的な質問ですが、Objective-C, Cocoa Application両方とも初心者です。ボボタンを押すことで、NSTableViewに新しいデータを追加したいのですが、
デバッグして、データ自体はちゃんとデータソースの方に追加されているのですが、TableViewが表示していないようです。
reloadData, setNeedsDisplayも両方ためしたのですが、表示されません。
ちなみに、新しいデータを追加する関数ですが、tableViewがロードされる前にコールしたときはちゃんと新しいデータがtableViewに表示されています。
コードです。
******************
dataはNSMutableArrayでItemInfoというクラスのArrayです。(ItemInfoは単純にNSString* nameとint priceの2つのデータを持っているクラスです。)
この関数はすべてNSViewControllerのメンバ関数です。
-------コード----------
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
if(self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]){
data = [[NSMutableArray alloc]initWithCapacity:5];
[data addObject:[[ItemInfo alloc]initWithName:@"Item1" price:100]];
[self addNewItem:nil]; //ここでのaddNewItemは反映され、TableViewには合計2つのデータが表示されています。
}
return self;
}
-(IBAction)addNewItem:(id)sender
{
//ここはボタンを押したときにちゃんと実行されているのを確認しています。
//実際にdataにも新しいデータが追加されていることをデバッガで確認済みです。
ItemInfo *newItem = [[ItemInfo alloc]initWithName:@"NewItem" price:300];
[data addObject: newItem];
[tableView reloadData];
}
#pragma mark -
#pragma mark Table View Datasource
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [data count];
}
- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
//tableView には2つのColumnがあり、一つ目はItemInfo内のnameを、2つ目にはpriceを表示しています。
if([aTableColumn.identifier isEqual:@"Item"]){
return [[data objectAtIndex:rowIndex] name];
}else if([aTableColumn.identifier isEqual:@"Price"]){
return [NSString stringWithFormat:@"%d", [[data objectAtIndex:rowIndex] price]];
}
return nil;
}
------コード終わり------
開発環境は以下の通りです。
OS: MacOSX10.6 SnowLeopard
Xcode Version3.2.4
Cocoa Application
お礼
確かにマナーとしてという観点は必要かもしれませんね