我正在尝试找出“正确”的方法来处理使用 iPhone 应用程序的键值编码填充数组。我想出了一些可行的方法,但它相当hackish。基本上,我将 XML 文档解析为一组代码生成的模型。让我们假设 XML 是这种格式:
<foo>
<bar>
<item name="baz" />
<item name="bog" />
</bar>
</foo>
在我生成的代表 Bar 元素的对象上,我为子节点定义了一个 NSMutableArray:
@interface Bar : NSObject {
NSMutableArray *item;
}
@end
因此,默认情况下,当我在 Bar 的实例上调用 setValue:forKey: 时,它最终会用 Item 对象的单个实例覆盖 NSMutableArray 的实例。我目前为使其正常工作所做的工作是它变得很糟糕的地方。我将数组实例变量重命名为别的东西,让我们说名称的复数形式:
@interface Bar : NSObject {
NSMutableArray *items;
}
@end
这会导致 setValue:forKey: 的默认访问器丢失。然后我将此方法添加到 Bar 实现中:
- (void)setValue:(id)value forUndefinedKey:(NSString *)key {
if([key isEqualToString:@"item"]) {
if(items == nil) {
items = [[NSMutableArray alloc] init];
[items retain];
}
[items addObject:value];
}
}
一切正常!我相信一定有更好的方法来做到这一点!我已经通读了 Key-Value Coding Programming Guide,但我一定遗漏了一些东西,因为我不清楚数组访问器应该如何工作。我已经尝试实现 countOf: 和 objectInAtIndex: 他们 KVC 编程指南似乎表明,但这仍然会导致我的 NSMutableArray 被 Item 类型的实例覆盖。