【发布时间】:2016-03-16 19:16:11
【问题描述】:
我正在尝试复制剪贴板上的 NSTableView 行。这是我的代码:
- (void) copy:(id)sender
{
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
// I get warning in the line bellow, unused variable changeCount
NSInteger changeCount = [pasteboard clearContents];
NSInteger row = [self.customersViewController.customersTableView selectedRow];
NSTableColumn *columnFirstName = [self.customersViewController.customersTableView tableColumnWithIdentifier:@"firstName"];
NSCell *cellFirstName = [columnFirstName dataCellForRow:row];
NSArray *objectsToCopy = @[[cellFirstName stringValue]];
// I get warning in the line bellow unused variable OK
BOOL OK = [pasteboard writeObjects:objectsToCopy];
}
此代码有效,如果我在 NSTableView 中选择行,则所选行的 firstName 列的内容确实在粘贴板上(我可以将值粘贴到文本编辑器中)。
然而,这段代码有几个问题:
1. 从我的 cmets 中可以看到,我收到 2 个警告。我重写代码以消除这样的警告。我重写代码的方式有什么问题吗?
// warning one
NSInteger changeCount = 0;
changeCount = [pasteboard clearContents];
// warning 2
BOOL OK = NO;
OK = [pasteboard writeObjects:objectsToCopy];
-
在上面的代码中,我指定了我使用的 NSTableView
...self.customersViewController.customersTableViev....
但是,如果用户切换视图,它可能会使用其他一些 NSTableView...我如何找出复制方法应该从哪个 NSTableView 复制行?
如果我评论我使用特定 NSTableView 的行并尝试使用发件人,我的应用程序崩溃。
//NSInteger row = [self.customersViewController.customersTableView selectedRow];
NSInteger row = [sender selectedRow];
3.我如何编写一个循环来获取所有列名,而不是一一手写?反正我也不知道用的是哪个NSTableView....
NSTableColumn *columnFirstName = [self.customersViewController.customersTableView tableColumnWithIdentifier:@"firstName"];
【问题讨论】:
-
你要粘贴什么,以什么格式,按什么顺序?
-
数据源还是绑定?基于单元格还是基于视图?
-
我想粘贴所选行中的所有单元格值,其顺序与 NSTableView 中的列的顺序相同。我使用绑定,并且 NSTableView 是基于单元格的。关于问题1的答案,我将再次对其进行审查,因为我不明白为什么提供的解决方案在该特定代码中有效。不过,我更希望听到对我的代码的评论。
标签: objective-c cocoa copy nstableview