Objective c 从NSTableView获取stringValue

Objective c 从NSTableView获取stringValue,objective-c,cocoa,nstableview,Objective C,Cocoa,Nstableview,我有一个简单的NSTableView,其中加载了NSMutableArray中的数据。当我在tableView中选择一行(条目)并对其进行修改时,我可以找到行索引,但我无法得到的是作为字符串编辑的条目,因此我可以修改数组。我可以找到很多关于选择行等的信息,但没有找到如何获得实际修改的字符串。我一直认为这应该很简单。请帮忙 我的部分代码: - (IBAction)toDoEdit:(id)sender // Accept the edited data { NSString *toDoIt

我有一个简单的NSTableView,其中加载了NSMutableArray中的数据。当我在tableView中选择一行(条目)并对其进行修改时,我可以找到行索引,但我无法得到的是作为字符串编辑的条目,因此我可以修改数组。我可以找到很多关于选择行等的信息,但没有找到如何获得实际修改的字符串。我一直认为这应该很简单。请帮忙

我的部分代码:

- (IBAction)toDoEdit:(id)sender // Accept the edited data
{
    NSString *toDoItem = [[toDoTableCell:toDoTableView dataCellFoTableColumn:0 row:rowToBeEdited] stringValue];
//我发现错误“dataCellForTableColumn”方法找不到

[toDoArray replaceObjectAtIndex:rowToBeDeleted withObject:toDoItem];
[toDoTableView reloadData];
[toDoTableView deselectRow:rowToBeDeleted];
}
~~~~~~~~~~~
// This method should return the cell value of the selected row
- toDoTableCell:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
   return toDoTableCell; // No errors here but toDoTableCell is nil.
}

“添加”数据到tableView工作,“删除”数据从tableView工作,我无法从tableView中获取编辑的数据,因此我可以重新加载带有更正的数据。

这很简单。请阅读Cocoa绑定和NSArrayController。

您正在寻找的是NSTableView委托方法:

- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row

这将返回您指定的行和列中的NSCell。您应该能够从NSCell中提取所需的值。根据您使用NSCell的方式,您可以调用[cell stringValue]或[cell objectValue].

请看一看NSTableView方法、selectedColumnIndexes、selectedRow和selectedRowIndexes。我想它们应该为您提供所需的信息

现在,您可以查询模型,即数组,以获取所需的数据。

尝试以下操作:

– tableView:setObjectValue:forTableColumn:row:
在—

---根据评论编辑---

每当用户试图编辑一个表行时,就会调用上述方法,它还会向用户提供更改后的值作为参数。如果您试图编辑表中的行,那么它应该可以满足您的需要。您只需检查作为参数获得的objectValue,并验证它是否正确。如果它不正确,您可以n修改获得的值并将其设置为todoArray

简而言之:

- (void)tableView:(NSTableView *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex
{
   // below case is an example, you can add your own
   if([anObject isEqualToString:@"Incorrect"])
   {
      anObject = @"Correct";
   }
   // Considering todoArray is array of dictionary items containing keys as table-column identifiers
   NSMutableDictionary *originalData = [todoArray objectAtIndex:rowIndex];
   [originalData setValue:anObject forKey:[aTableColumn identifier]];

   [toDoTableView reloadData];
}
要获取正在编辑的值,在设置新值之前,您只需在上述方法中使用此代码:

NSString *editedValue = [[todoArray objectAtIndex:rowIndex] valueForKey:[aTableColumn identifier]];

希望这有帮助:)

对不起,我只是在学习有关目标C的教程的第6章,这些文档仍然超出我的知识水平。我正在编辑显示表中的信息,需要将结果放回数组中。我的问题是我不知道如何从显示表中获取编辑后的信息,以便更新数组。我可以实现该方法,但我不知道如何获取单元格值以便返回该值。我尝试的所有操作都会在调试日志中返回一个混乱的结果。我刚开始学习Objective C,因此我的知识非常有限。该方法返回一个单元格。该单元格应该引用您的数据,在您的情况下,[theCell stringValue],这将返回单元格内容的NSString表示形式。谢谢,但我可以将数据加载到tableView中,我只是无法从tableView中获取已编辑的值。谢谢你的帮助,但我已放弃。我知道所选行,所以我转到数组,将该值放回TextField并在那里编辑,然后替换该值在数组中并重新加载tableView。这不是我真正想要的,但它可以工作。也许当我知道更多的时候,我可以重新讨论这个问题。你给了我正确的方向。这是一种太多的信息,而我的知识不够。以下是我发现有效的方法:-(无效)tableView:(NSTableView*)aTableView setObjectValue:(id)一个对象forTableColumn:(NSTableColumn*)aTableColumn行:(NSInteger)行索引{[toDoArray replaceObjectAtIndex:rowIndex With Object:anObject];}这使它工作得很好。感谢您的帮助。