Cocoa 中的 NSArrayController 应用过滤器后如何从 NSArray 获取值

How to get values from an NSArray after applying filter to NSArrayController in Cocoa

我正在 cocoa 中学习绑定。我的 ArrayController 绑定到 table 视图和搜索字段。数据显示和过滤很好。 这些属性在 mutableArray.

@property (nonatomic, strong) NSString *displayName;
@property NSInteger entityID;
@property (nonatomic, strong) NSString *MemberStatus;

在 table 中,我显示的是 'displayName'。我的主要问题是,我需要 select 一行和 运行 使用该 selected 成员的 'entityID' 的网络服务。

如果我不过滤 select 一行,我可以使用 selected 行索引从 mutable 数组中获取所需的 'entityID' .

[[[self.participantArray objectAtIndex:selectedRow] valueForKey:@"entityID"] integerValue] 

每当我过滤时,根据 selected 行索引,它自然会返回错误的值。我如何获得正确的字段?请帮忙。如果我的问题不清楚,请说明您需要什么。 谢谢。

table 视图正在显示阵列控制器的 arrangedObjects。所以,你也应该对此进行索引。

您将需要阵列控制器的出口,以便您可以执行以下操作:

[[[self.particpantsController.arrangedObjects objectAtIndex:selectedRow] valueForKey:@"entityID"] integerValue]

(我实际上不确定你为什么在这里使用 -valueForKey:。表达式 [self.particpantsController.arrangedObjects objectAtIndex:selectedRow] 给你对象。如果它有一个 entityID 属性 ,您可以只调用该对象上的 getter。如果它是一个 NSDictionary,那么您应该更喜欢 -objectForKey: 而不是 -valueForKey:。好吧,实际上,您应该更喜欢创建一个真正的模型对象 class 并使用它而不是 NSDictionary。制作字典在玩具应用程序和原型制作中往往很有效,但很快就会显示出它的局限性。)