键值编码

5
当我开始制作一个简单的iPhone应用程序时,我的一个直截了当的方法是将XML摘录中的键/值对转换为NSDictionary。问题在于,我需要将那些曾经填充我的UITableView的NSDictionary实例转换为自定义类,因为它们需要行为和额外的复杂性。这里的问题是,现在为了实例化一个对象并使用来自Web服务的键/值对填充其实例变量变得更加困难。我不能再将其放入通过XML进行迭代并使用KVC设置其实例变量的方法中。还有什么其他的解决方案?
2个回答

8
只要您恰当地命名变量,就可以在自定义类上仍然使用键值编码方法,这方面没有任何区别。但是,当我使用XML时,通常会测试每个节点名称或创建一个键查找表,因为我使用的数据源中的名称不符合键值编码规范。如果您对数据源具有控制权,则可以继续使用setValue:forKey:。
如果您尚未阅读过关于键值编码的此指南,我建议您阅读它。这对Cocoa中许多重要工具至关重要。

听起来不错,马克。有没有可能解释一下你的意思,即数据源中的名称不符合键值编码规范?那你测试节点用来做什么? - Coocoo4Cocoa
大写字母的使用是重要的,但节点名称并不总是与变量名相匹配。例如,DetailPageURL 可能映射到 pageURL,Title 映射到 title 等等。 - Marc Charbonneau

1

了解NSCoding。您可以使用NSCoding协议将对象及其所有属性保存为数据。

一旦您的对象符合NSCoding标准,就可以使用NSKeyedArchiver归档整个对象数组。

请注意,如果您有大量对象,则在加载和保存期间可能会严重影响iPhone应用程序的性能。


NSCoding看起来是一个很好的解决方案,August。但我担心使用它会带来性能损失。我的对象通常包含5/6个实例变量,基本数据类型。我想知道需要多少个实例变量才会使我的应用程序崩溃。 - Coocoo4Cocoa
他正在使用 XML Web 服务,而不是询问如何将对象持久化到数据源。 - Marc Charbonneau
正面或负面影响? - Harald Scheirich
Charbonneau 是正确的。我会收到一个 XML 源,它对应于 iPhone/Mac 客户端上的一个对象。通常它会是这样的:<user><name>Bob</name><age>43</age></user> 我以前有一个方法,可以将 key/value 代码 NSDictionary 实例化。 - Coocoo4Cocoa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接