【发布时间】:2013-08-22 18:05:19
【问题描述】:
我有两个对象:
@interface AObject : NSObject
@property NSArray *bObjects;
@end
@interface BObject : NSObject
@property NSString *name;
@end
在AObject 的实例上使用键值编码,我可以得到bObjects 的列表(@"self.bObjects")和bObjects 的名称列表(@"self.bObjects.name")。
但是,我想要的只是bObjects 的第一个名称。我的直觉是键值编码应该支持列表下标,例如:@"bObjects[0].name"。
但这似乎并不存在。如何获得单个实体; AObject 的第一个 BObject 的名称,使用键值编码?
脚注:我在上一个问题中意识到我愚蠢地将 NSPredicate 和 KV 编码混为一谈。
【问题讨论】:
-
你没有。 KVC 不支持访问集合中的单个元素。如果你需要这种支持,你应该打开一个雷达。
-
@RobNapier,你可以作弊并使用
firstObject作为密钥吗? -
我不确定你可以。如果我们假设这是可能的,那么在尝试访问给定索引处的非现有对象时会遇到麻烦(NSOutOfBoundsException)。
-
@Wain:我刚试过这个。问题是数组上的
valueForKey:立即将键应用于所有数组元素。所以[aObject valueForKeyPath:@"bObjects.firstObject.name"]尝试将firstObject应用于bObjects数组中的所有元素,而不是应用于数组本身。 - 我从来没有找到避免这种情况的方法。 -
对于这种特殊情况,我能想到的唯一解决方案是将属性“firstBObject”添加到
AObject类。这行得通,但不是很通用。
标签: ios objective-c key-value-coding