【问题标题】:Saving custom data types保存自定义数据类型
【发布时间】:2011-03-29 04:48:48
【问题描述】:

我正在制作一个类似于苹果天气应用的应用。我的主视图有一个 NSMutableArray 要显示的对象。该数组由用户管理。我希望能够保存此数组,以便在重新启动应用程序时它具有用户选择的内容。存储的对象是“事件”对象,它是一种自定义对象类型,可存储更多自定义对象,这些对象都包含以下内容:NSString、NSNumber、NSUInteger、NSURL。我的研究使我想到了三个选项,我都不了解,也不知道如何实现:使用 writeToFile 保存到 plist、归档数据或将其保存到 userPrefs。 有人知道我的问题的解决方案吗?

示例数据对象: `

@interface Rider : NSObject {
    NSString *name;
}
-(Rider *) initWithName:(NSString *) nam;
- (NSString *)description ;


@property (nonatomic, retain) NSString *name; 

`

【问题讨论】:

    标签: iphone


    【解决方案1】:

    这三个选项中至少有两个是合理的。 NSUserDefaults 实际上更多的是用于存储应用程序首选项,而不是作为存储大量数据的选项,因此如果您有大量数据,您应该首先考虑其他可能性。

    属性列表易于读写,但您只能使用少数几种标准类型:NSString、NSData、NSArray、NSDate 和 NSNumber。您可以使用这些类型做很多事情,但是由于您自己的 Event 类涉及到使用属性列表,因此不会那么简单。

    归档似乎是最好的计划。您需要做的就是在您的自定义类中采用一个简单的协议 NSCoding(并确保您使用的其他类,如 NSArray,也实现 NSCoding)。然后,创建一个 NSKeyedArchiver 实例并要求它归档您的对象图。稍后重新创建对象图同样简单:使用您的文件数据创建一个 NSUNarchiver 实例并取消归档您的对象。

    您可以在Archives and Serializations Programming Guide 中阅读有关归档和属性列表的信息。在继续之前阅读该文档。

    还有其他选项——如果需要,您始终可以使用标准 C 文件操作直接写入文件。但是,这不太可能像归档那样方便。

    【讨论】:

      【解决方案2】:

      你的问题本身就有答案。

      将您的每个对象创建为字典,最后您将拥有字典数组。 NSArray 和 NSDictionary 具有将其数据写入文件的方法(首选 plist)。如果你使用 plist 文件,它会很容易再次阅读。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 1970-01-01
        相关资源
        最近更新 更多