Cocoa 如何在NSTableView中编辑一行以允许删除该行中的数据并替换为新数据?

Cocoa 如何在NSTableView中编辑一行以允许删除该行中的数据并替换为新数据?,cocoa,nstableview,Cocoa,Nstableview,我正在构建一个待办事项列表应用程序,我希望能够编辑表中的条目并用新条目替换它们。我几乎可以做我想做的事,但不能放弃。以下是我目前的代码: /* IBOutlet NSTextField *textField; IBOutlet NSTabView *tableView; IBOutlet NSButton *button; NSMutableArray *myArray; */ #import "AppController.h" @implementation AppContro

我正在构建一个待办事项列表应用程序,我希望能够编辑表中的条目并用新条目替换它们。我几乎可以做我想做的事,但不能放弃。以下是我目前的代码:

/*
 IBOutlet NSTextField *textField;
 IBOutlet NSTabView *tableView;
 IBOutlet NSButton *button;
 NSMutableArray *myArray;
 */

#import "AppController.h"


@implementation AppController


-(IBAction)addNewItem:(id)sender
{

    [myArray addObject:[textField stringValue]];
    [tableView reloadData];     
}

- (int)numberOfRowsInTableView:(NSTableView *)aTableView
{
    return [myArray count];
}

- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
            row:(int)rowIndex
{

    return [myArray objectAtIndex:rowIndex];
}

- (id)init
{
    [super init];
    myArray = [[NSMutableArray alloc] init];
    return self;
}
-(IBAction)removeItem:(id)sender
{

    NSLog(@"This is the index of the selected row: %d",[tableView selectedRow]);
    NSLog(@"the clicked row is %d",[tableView clickedRow]);
    [myArray replaceObjectAtIndex:[tableView selectedRow] withObject:[textField stringValue]];
    [myArray addObject:[textField stringValue]];
    //[tableView reloadData];
}

@end

现在还不清楚您遇到了什么问题,因此这里有一个更好的方法来实现编辑:

为什么不仅仅是信息?然后,用户可以通过双击在表视图中编辑正确的值;不需要单独的文本字段


如果只允许编辑某些列而不允许编辑其他列,还有一个问题。

Peter的回答是正确的,但只是为了防止有人寻找编辑行的完整方法:

- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
   YourClassWhichHoldsRowRecord *abc = [yourMutableArray objectAtIndex:row];
   [abc setValue:object forKey: [tableColumn identifier]];
}