Objective c 如何用长度未知的字符串替换字符串?

Objective c 如何用长度未知的字符串替换字符串?,objective-c,nstableview,Objective C,Nstableview,我正在构建一个待办事项列表应用程序,它使用以下对象: 用于数据输入的NSTexField NSTableView显示数据(仅字符串对象) NSN按钮,单击该按钮将NSTextField的内容添加到NSTableView中以供显示 我要做的是用另一个字符串替换NSTableView中任何行中的任何给定字符串。 例如,假设用户输入以下内容 洗车 购买星际争霸2 升级视频卡 但是,在第三排,我想改变这一点,建立一个新的个人电脑。我如何才能做到这一点?以下是我到目前为止的情况: #import "App

我正在构建一个待办事项列表应用程序,它使用以下对象:

  • 用于数据输入的NSTexField
  • NSTableView显示数据(仅字符串对象)
  • NSN按钮,单击该按钮将NSTextField的内容添加到NSTableView中以供显示
  • 我要做的是用另一个字符串替换NSTableView中任何行中的任何给定字符串。 例如,假设用户输入以下内容

  • 洗车
  • 购买星际争霸2
  • 升级视频卡
  • 但是,在第三排,我想改变这一点,建立一个新的个人电脑。我如何才能做到这一点?以下是我到目前为止的情况:

    #import "AppController.h"
    
    
    @implementation AppController
    
    -(id)init
    {
        [super init];
        [tableView setDataSource:self];
        [tableView setDelegate:self];
        array = [[NSMutableArray alloc ] init];
        //NSLog(@"this is my delegate %@",[tableView delegate]);
        return self;
    }
    
    -(IBAction)addItem:(id)sender
    
    {
        inputString = [textField stringValue];
        [array addObject:inputString];
        [tableView reloadData];
        return;
    }
    
    - (int)numberOfRowsInTableView:(NSTableView *)aTableView
    {
    
        return [array count];
    }
    
    - (id) tableView:(NSTableView *)aTableView
    objectValueForTableColumn:(NSTableColumn *)aTableColumn
                 row:(int)rowIndex
    {
        //NSLog(@"this is the object %@",[array objectAtIndex:rowIndex]);
        return [array objectAtIndex:rowIndex];
    }
    
    -(IBAction) replaceItem:(id)sender
    {
    
    
        NSLog(@"The selected row %d",[tableView selectedRow]);
        NSLog(@"The objectAtIndex is: %@",[array objectAtIndex:[tableView selectedRow]]);
        [array replaceObjectAtIndex:[tableView selectedRow ]  withObject: @"Micheal jordan"];
        [tableView reloadData];
        return;
    
    }
    - (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)
    aTableColumn row:(NSInteger)rowIndex
    
    {
        return YES;
    
    }
    
    
    @end
    
    增编: 我按照建议添加了一个新方法。它现在“工作”,但不是我想要的方式。我想编辑NSTableView“in line”中的条目,但我不知道如何操作。现在可以通过选择要编辑的行,然后将NSTextField中的新字符串放入NSTableView中来实现

    #import "AppController.h"
    
    
    @implementation AppController
    
    -(id)init
    {
        [super init];
        [tableView setDataSource:self];
        [tableView setDelegate:self];
        array = [[NSMutableArray alloc ] init];
        //NSLog(@"this is my delegate %@",[tableView delegate]);
        return self;
    }
    
    -(IBAction)addItem:(id)sender
    
    {
        inputString = [textField stringValue];
        [array addObject:inputString];
        [tableView reloadData];
        return;
    }
    
    - (int)numberOfRowsInTableView:(NSTableView *)aTableView
    {
    
        return [array count];
    }
    
    - (id) tableView:(NSTableView *)aTableView
    objectValueForTableColumn:(NSTableColumn *)aTableColumn
                 row:(int)rowIndex
    {
        //NSLog(@"this is the object %@",[array objectAtIndex:rowIndex]);
        return [array objectAtIndex:rowIndex];
        //return [array replaceObjectAtIndex:[tableView selectedRow ]  withObject: @"Micheal jordan"];
    }
    - (void)tableView:(NSTableView *)aTableView
       setObjectValue:(id)anObject
       forTableColumn:(NSTableColumn *)aTableColumn
        row:(NSInteger)rowIndex
    {
    
        [array replaceObjectAtIndex:[tableView selectedRow] withObject:[textField stringValue]];
        return;
    }
    
    - (BOOL)tableView:(NSTableView *)aTableView shouldEditTableColumn:(NSTableColumn *)
    aTableColumn row:(NSInteger)rowIndex
    
    {
        return YES;
    
    }
    

    首先,
    -tableView:shouldEditTableColumn:row:
    的默认值是
    YES
    ,因此您不需要实现它,尽管稍后您可能会选择限制对某些行/列的编辑,因此可以将其保留在那里

    除了您所做的之外,您还缺少一个实现。如果您实现了这一点,并用给定的对象值替换数组中的项,那么一切都应该正常。您甚至不需要重新加载数据


    编辑:我所描述的内容允许人们在表视图中就地编辑内容。然后,只需添加新项目即可使用您的按钮。

    首先,
    -tableView:shouldEditTableColumn:row:
    的默认值为
    YES
    ,因此您不需要实现它,尽管您以后可能会选择限制某些行/列的编辑,因此可以将其保留在那里

    除了您所做的之外,您还缺少一个实现。如果您实现了这一点,并用给定的对象值替换数组中的项,那么一切都应该正常。您甚至不需要重新加载数据


    编辑:我所描述的内容允许人们在表视图中就地编辑内容。然后,只需要您的按钮来添加新项目。

    因此,我需要在我已有的实现tableView:setObjectValue:forTableColumn:row之外添加另一个实现tableView:setObjectValue:forTableColumn:row?我的错误您提到的方法不同。因此,我需要在我已有的实现tableView:setObjectValue:forTableColumn:row之外添加另一个实现tableView:setObjectValue:forTableColumn:row?我的你提到的方法是不同的。