使用过滤器谓词在NSTableView中获取所选行索引的问题

时间:2009-09-26 01:05:35

标签: binding nsmutablearray nstableview nsarraycontroller

我不确定我是否正确地说这个,但基本上我是在我的主应用代表中这样做的:

Application * app = [[Application alloc] initWithApplication:fullPath]

Application类有一个initWithApplication方法,它接受应用程序的路径,然后设置appPath,name等的属性。然后我将新的“app”对象添加到应用程序NSMutableArray:

if (app) [applications addObject: app];

NSArrayController的内容数组绑定到应用程序NSMutableArray,然后在NSArrayController中设置各种键(appPath,name等)。然后,我有一个表视图,其中各种列绑定到不同的属性,例如名称的一列,路径的一列等等。

然后我有一个启动按钮,用于启动在表视图中选择的应用程序。为此我使用此代码:

Application *app = [applications objectAtIndex:[tableView selectedRow]];

然后我只使用“app.appPath”作为对当前所选项目路径的引用。这很好用。当使用filterPredicate过滤表视图内容时,会出现问题。基本上它会过滤掉表格视图中的所有应用,只留下名称中包含在搜索框中输入的短语的应用。

上述方法不起作用,因为它获取表视图中项的索引,并且由于所有项都不在表视图中,因此计数变得混乱。例如,假设我有一个名为MyApp.app的应用程序,它是应用程序数组索引25处的项目。

上面的代码很有效,因为tableView和applications数组具有相同数量的对象。但是,过滤掉表视图的内容会导致对象数量的差异,因此会启动错误的应用程序。

我希望我的解释不会太混乱,但很难解释。有什么方法吗?

由于

1 个答案:

答案 0 :(得分:1)

对于想要了解的人来说,解决方案非常简单:

[[arrayController selection] valueForKey:@“appPath”]

HTH