このプログラムには4つの列を持つNSTableViewがあり、そのうち2つはチェックボックスの作成です。私はただ一人で働かせようとしているだけで、私は立ち往生してしまった。
まず、ここに私の関連するコードは次のとおりです。NSTableColumnに状態を反映するためのチェックボックスの取得
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView {
NSString *filePathThree = [[NSBundle mainBundle] pathForResource:@"mydictionary" ofType:@"plist"];
NSData *myDataThree = [[NSData alloc]initWithContentsOfFile:filePathThree];
self.flozzCodeAndName = (NSMutableDictionary *)[NSPropertyListSerialization
propertyListFromData:myDataThree
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:NULL
errorDescription:NULL];
return [[flozzCodeAndName objectForKey:@"name"] count];
}
- (void)tableView:(NSTableView *)tableView
setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)rowIndex
{
NSButtonCell *cell;
cell = [[NSButtonCell alloc] init];
[cell setButtonType:NSSwitchButton];
[cell setTitle:@""];
[cell setTag:rowIndex];
NSLog(@"%d", [cell tag]);
[cell setCellAttribute:NSCellEditable to:3];
[cell setImagePosition:NSImageOnly];
[cell setState:NSOnState];
NSLog(@"%d", [cell state]);
[havzColumn setDataCell:cell];
[myTableVeew reloadData];
[cell release];
}
- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex {
NSString *filePathThree = [[NSBundle mainBundle] pathForResource:@"mydictionary" ofType:@"plist"];
NSData *myDataThree = [[NSData alloc]initWithContentsOfFile:filePathThree];
self.flozzCodeAndName = (NSMutableDictionary *)[NSPropertyListSerialization
propertyListFromData:myDataThree
mutabilityOption:NSPropertyListMutableContainersAndLeaves
format:NULL
errorDescription:NULL];
NSArray *myArray = [flozzCodeAndName objectForKey:[aTableColumn identifier]];
NSString *myStringValue = [myArray objectAtIndex:rowIndex];
return myStringValue;
}
あなたが見ることができるように、私はむしろバインドよりも、このテーブルのデータソースメソッドを使用しています。私がココアのために読んだ本では、タグ付きのチェックボックスをいくつか作っていましたが、配列になっていると思うので、これは最善のことではないかもしれません。
とにかく、これを実行すると、デバッガにボタンの状態(NSOnStateのために1つのタグ)が表示されます。私の問題は、自分の状態に応じてチェックを入れたりチェックを外したりすることができないということです。私はこの質問を読む:Checkbox on table column won't register click
そして、NSTableViewデータソースの参照。 Nozziさんによると、リンクされた質問の中には、箱の状態を含む配列が必要なので、NSMutableArrayに取得するには[cell state]
をNSNumberに設定してみました。私はそれをFUBARし、それが正しいとは思わない。このテーブルには454個の行があります(タグは0から始まる配列のため453になります)。
また、私はtableview:setObjectValue:にあるセル定義のものを 'awakeFromNib'に入れるべきかどうか疑問です。私はIBの中にチェックボックスボタンのセルを置いていましたが、それ以前に問題が発生していましたので、プログラムでもそれをやることにしました。これらのすべての中で、私はまだ、setObjectValueメソッドに[myTableVeew reloadData]
を持っていました。
他の情報が必要な場合は、私が手に入れることができます。