iCloud – 如何保存包含自定义对象数组的存档

我已经开发了一个小应用程序,通过归档一组自定义对象在iOS中本地存储,其中包含:

@property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *dateCreated; @property (nonatomic, copy) NSString *desc; @property (nonatomic, copy) NSString *url; 

我想要使​​用iCloud同步所述档案,我相信推荐的机制是通过一个UIDocument子类。 所有UIDocument的例子我发现使用1个单一的NSString的单个实例,所以我有点困惑如何去同步整个自定义对象的数组,但利用UIDocument(就像我今天通过NSCoding本地做的那样)。

我是否应该创build一个包含上面列出的属性的UIDocument对象数组,是否应该创build一个包含上述数据对象实例的UIDocument实例,然后创build一个包含所有实例的数组,或者应该1个单个UIDocument包含完整的数组自定义对象?

我做了一些研究,但我仍然困惑。 最后,我需要同步只有一个文件,其中包含所述自定义对象的数组。

在此先感谢您的帮助

我今天有一个自定义类,如上所述的4个string称为片段,并在我的根视图控制器我有一个NSMutableArray调用列表,我添加该片段类的每个新的实例。

 self.list = [[NSMutableArray alloc] init]; Snippet *newEntry = [[Snippet alloc] init]; [self.list addObject:newEntry]; 

我应该创build一个拥有自定义对象数组的UI文档子类吗?

文档中的例子确实显示了一个UIDocument子类,它只有一个string,但是它会从-contentsForType:error:返回一个NSData。 您可以使用NSKeyedArchiver在NSData中存储任意数量的对象。 阅读序列化对象 ,学习如何使用NSKeyedArchiver编码对象(并继续阅读,学习如何让他们回来!)。

以你的属性为例…

 @interface MyDocument : UIDocument { } @property (nonatomic, copy) NSString *name; @property (nonatomic, copy) NSString *dateCreated; @property (nonatomic, copy) NSString *desc; @property (nonatomic, copy) NSString *url; @end @implementation MyDocument //... - (id)contentsForType:(NSString *)typeName error:(NSError **)outError { NSMutableData *data = [NSMutableData data]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data]; [archiver encodeObject:name forKey:@"name"]; [archiver encodeObject:dateCreated forKey:@"created"]; [archiver encodeObject:desc forKey:@"desc"]; [archiver encodeObject:url forKey:@"url"]; [archiver finishEncoding]; // release archiver if you're not using ARC return data; } @end; 

警告:我没有编译上面的代码,所以没有保证。 这应该作为一个例子来说明使用存档器将多个对象存储在单个数据对象中,您可以将其作为文档内容返回。