我现在不在我的 Xcode 计算机上,所以我无法对此进行测试,但似乎你并不真的需要另一个阵列控制器,而只需要另一个阵列来保存 likeFruits。我认为您需要从您获取的Fruits 数组中创建一个字典数组,该数组将有一个用于水果名称的键和另一个带有布尔值的键,用于是否选中复选框-此布尔值将绑定到您的第二列。我不确定下一步如何告诉 likeFruit 数组它需要添加一个新水果——我认为该复选框可能有一个操作方法,您可以使用该方法让 likeFruit 数组将对象添加到单击复选框的行。
编辑后:
这是一个如何做我建议的例子。我将水果数组转换为字典数组(称为 theData),其中包含复选框值的键(在 IB 中,数组控制器的内容数组绑定到 theData,列绑定到数组 Controller.arrangedObjects.fruitName 和数组 Controller.arrangedObjects.isLiked)。checkChanged 是一个连接到复选框的 IBAction(但注意发送者实际上是表格视图),我使用复选框的值来确定是添加一个水果到 likeFruits 还是删除一个。我又添加了一个方法,连接到一个按钮,只是为了检查 likeFruits 中的值。
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
self.theData = [NSMutableArray array];
self.likedFruit =[NSMutableArray array];
NSArray *acquiredFruits = @[@"Apple",@"Orange",@"Pear",@"Peach"];
for (NSString *aFruit in acquiredFruits) {
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:aFruit,@"fruitName",[NSNumber numberWithBool:NO],@"isLiked", nil];
[self.theData addObject:[dict mutableCopy]];
}
self.theData = _theData;
// NSLog(@"%@",self.theData);
}
-(IBAction)checkChanged:(NSTableView *)sender { //connected to the button cell in the table view (but sender is the table view)
NSString *theFruit = [[self.controller.arrangedObjects objectAtIndex:sender.clickedRow ] valueForKey:@"fruitName"];
BOOL doWeLikeIt = [[[self.controller.arrangedObjects objectAtIndex:sender.clickedRow] valueForKey:@"isLiked"] boolValue];
if (doWeLikeIt) {
[self.likedFruit addObject:theFruit];
}else{
[self.likedFruit removeObject:theFruit];
}
}
-(IBAction)logLikedFruits:(id)sender {
NSLog(@"%@",self.likedFruit);
}