gpt4 book ai didi

cocoa - Cocoa 中不区分大小写的 KVC?

转载 作者:行者123 更新时间:2023-12-03 16:08:34 25 4
gpt4 key购买 nike

对于我正在考虑使用的特定方法,我希望得到一些反馈。场景如下。

我有一个对象(我们称之为 MObject),它有许多属性,例如 x 和 y 坐标、高度和宽度。这些属性根据 KVC 准则命名(MObject.x;MObject.height 等)。我的下一个任务是读入描述此 MObject 的 XML 文件。不幸的是,XML 元素的命名不同——X 和Y、高度和宽度(注意大小写)。

理想情况下,XML 元素应与 MObject 的属性相匹配。在这种情况下,我可以使用 KVC 并避免一大堆代码:

for (xmlProperty in xmlElement)
{
[MObject setValue:xmlProperty.value forKey:xmlProperty.name].
}

解决这个问题的一种方法是使用不区分大小写的键。我该从哪里开始呢?还有其他更好的解决方案吗?

非常感谢您的建议。

最佳答案

如果可以的话,不要覆盖 -[NSObject valueForKey:]-[NSObject setValue:forKey:]

最好的选择是即时转换从 XML 文件获得的 key 。使用单独的方法进行转换,您还可以维护名称到属性键的缓存,因此每个转换只需执行一次。

- (NSString *)keyForName:(NSString *)name {
// _nameToKeyCache is an NSMutableDictionary that caches the key
// generated for a given name so it's only generated once per name
NSString *key = [_nameToKeyCache objectForKey:name];
if (key == nil) {
// ...generate key...
[_nameToKeyCache setObject:key forKey:name];
}
return key;
}

- (void)foo:xmlElement {
for (xmlProperty in xmlElement) {
[myObject setValue:xmlProperty.value forKey:[self keyForName:xmlProperty.name]].
}
}

关于cocoa - Cocoa 中不区分大小写的 KVC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/335833/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com