icloud的 - 如何保存包含自定义的数组归档对象

问题描述:

我已经在iOS中通过归档自定义对象包含数组开发了在本地存储一个小的应用程序:icloud的 - 如何保存包含自定义的数组归档对象

@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在本地做的那样)。

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

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

在此先感谢您的帮助

我今天是以上4串称为片段,并在我的根视图控制器描述我有一个NSMutableArray叫列表,其中我添加的每一个新实例的自定义类片段类。

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

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

example in the docs确实显示一个UIDocument子类,它只有一个字符串,但它返回一个来自-contentsForType:error:的NSData。您可以使用NSKeyedArchiver在NSData中存储任意数量的对象。阅读Serializing Objects,了解如何使用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; 

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

+0

感谢您的回答。所以如果我正确理解你,我可以使用+(NSData *)archivedDataWithRootObject:(id)rootObject与数组,然后 - (id)contentsForType:(NSString *)typeName错误:(NSError **)outError归档整个数组1 UIDocument的单一实例 – Will

+0

如何在这种情况下声明UIDocument? – Will

+0

我没有看到你在说什么数组。我会添加上面的代码片段来尝试提供帮助。 – Caleb