2011-03-29 94 views
1

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

数据采样对象: `

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


@property (nonatomic, retain) NSString *name; 

`

回答

0

至少有两个这三个选项是合理的。 NSUserDefaults对于存储应用程序首选项来说意味着更多,而不是用于存储大量数据的选项,因此如果您有大量数据,则应首先查看其他可能性。

属性列表很容易读,写,但你仅限于使用标准类型屈指可数:的NSString,NSData的,NSArray中,NSDate的,和NSNumber的。你可以用这些类型做很多事情,但是因为你自己的Event类涉及使用属性列表,所以不会那么简单。

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

您可以阅读Archives and Serializations Programming Guide中的归档和属性列表。在你走得更远之前阅读该文件。

还有其他选项 - 如果需要,您可以随时使用标准C文件操作直接写入文件。但是,这不太可能像存档一样方便。

0

你的问题本身所具有的答案。

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