【问题标题】:NSTableView: programmatically adding one row results in selection of many rows with the same values?NSTableView:以编程方式添加一行会导致选择许多具有相同值的行?
【发布时间】:2012-04-01 06:09:11
【问题描述】:

现在,我一直在阅读有关 NSArrayController 的所有内容。
我已经正确设置了我的 xib、NSArrayController、NSTableView 和绑定——除了我的 NSTableView 的一个奇怪行为之外,一切正常。

首先用一些代码来描绘场景:

@implementation MyAppDelegate

@synthesize arrayController, dataArray;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    self.dataArray = [NSMutableArray array];
}

- (IBAction)myControllerAddAction:(id)sender {
    NSString *val = [[NSDate date] description];
    NSMutableDictionary *item = [NSMutableDictionary dictionaryWithObjectsAndKeys:val, @"date", nil];
    [serversController addObject:item];
}

- (IBAction)myArrayAddAction:(id)sender {
    NSString *val = [[NSDate date] description];
    NSMutableDictionary *item = [NSMutableDictionary dictionaryWithObjectsAndKeys:val, @"date", nil];
    [[self mutableArrayValueForKey:@"dataArray"] addObject:item];
}

@end

使用-mutableArrayValueForKey:@"myNSArrayControllerStore" 并通过返回的NSMutableArray 代理的-addObject:myDictionary 添加对象,数组控制器指示表格视图绘制新内容,但它会选择具有相同值的所有行 在他们的NSCells 中

使用数组控制器的-addObject:myDictionary 它将绘制新行并选择新添加的行:

(在两个屏幕上,我每秒都连续点击多次)

为什么会这样?
使用[NSMutableArray -addObject:]时,我需要自己处理正确的行选择吗?
或者这是一个错误?

Mac OS 10.7.3
Xcode 4.3
基础 SDK 10.7
部署目标 10.6

【问题讨论】:

  • 我看不懂这些截图。在第一个屏幕截图中,它选择了所有 :17 行,即与添加的第一项匹配的行。在第二个中,只有一个具有给定值的项目。我在第一种情况下,每次单击都会扩展原始选择,直到时间更改为下一秒,而在第二种情况下,每次单击后选择移动?
  • @noa 是的,没错……有什么线索吗?

标签: objective-c cocoa nsmutablearray nstableview nsarraycontroller


【解决方案1】:

使用数组控制器的-addObject: 方法是处理插入的正确方法。它确保控制器向绑定到它的对象发送正确的消息。

听起来阵列控制器方法工作正常。

如果能够将数组控制器绑定到可变数组,并让它们正确监控对绑定数组的插入,这将很有用,但我不认为它们被设计为以这种方式工作。

【讨论】:

  • 是的。我知道。但根据thisother resources,我读过另一种方法应该也可以工作,因为它符合kvo 标准。我真的很想知道为什么会有这种视觉上的奇怪......
  • 感谢您发布这些链接 - 帮助我了解您的尝试。您的方法正在起作用,因为项目正在显示。 selectsInsertedObjects 的行为不正确。当您插入的项目是唯一的(例如,相隔超过一秒)时,您会得到什么结果?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多