【问题标题】:Key-Value Coding键值编码
【发布时间】:2008-12-18 20:25:07
【问题描述】:

当我启动一个简单的 iPhone 应用程序时,我有一种直接的方法将 XML 摘录的键/值对转换为 NSDictionary。问题是,我需要将那些曾经填充我的 UITableView 的 NSDictionary 实例转换为自定义类,因为它们需要行为和额外的复杂性。这里的问题是,现在为了让我实例化一个对象并用来自 Web 服务的键/值对填充其实例变量变得更加困难。我不能再将它放入一个遍历 XML 并使用 KVC 设置其实例变量的方法中。

还有哪些其他解决方案?

【问题讨论】:

    标签: iphone objective-c cocoa cocoa-touch key-value-observing


    【解决方案1】:

    您仍然可以在自定义类上使用键值编码方法,只要您适当地命名变量,那里就没有区别。尽管如此,当我使用 XML 时,我通常最终会测试每个节点名称或创建一个键查找表,因为我正在使用的数据源中的名称不符合键值编码。如果您可以控制数据源,则可以继续使用setValue:forKey:

    如果您还没有阅读键值编码,我建议您阅读this guide。它是 Cocoa 中许多出色工具的基础。

    【讨论】:

    • 听起来不错,马克。您是否有机会解释数据源中的名称不符合键/值编码的含义?您测试节点的目的是什么?
    • 大写起了作用,但节点名称并不总是与变量名称匹配。例如,DetailPageURL 可能映射到 pageURL,Title 到 title,等等。
    【解决方案2】:

    查看 NSCoding。您可以使用 NSCoding 协议将您的对象、属性和所有内容保存为数据。

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

    请注意,如果您有大量对象,这会极大地影响应用在 iPhone 上加载和保存期间的性能。

    【讨论】:

    • NSCoding 看起来是个不错的解决方案,August。我担心使用它的性能损失。我的对象通常包含 5/6 个实例变量、基本数据类型。我想知道我的应用程序需要多少容量。
    • 他正在使用 XML Web 服务,而不是询问如何将他的对象持久保存到数据源。
    • 正面或负面影响?
    • 夏博诺是正确的。我得到一个 XML 提要,其中对应于 iPhone/Mac 客户端上的一个对象。通常它会类似于 Bob43 我之前有一个方法可以对 NSDictionary 实例进行键/值编码。
    猜你喜欢
    • 2011-02-24
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多