4

我开发了一个小应用程序,通过归档一系列自定义对象,在 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 在本地做的那样)。

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

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

在此先感谢您的帮助

我今天拥有的是一个如上所述的自定义类,其中包含 4 个名为 Snippet 的字符串,在我的根视图控制器中,我有一个名为 list 的 NSMutableArray,我在其中添加了该 Snippet 类的每个新实例。

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

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

4

1 回答 1

2

文档中的示例确实显示了一个只有一个字符串的 UIDocument 子类,但它从-contentsForType:error:. 您可以使用 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;

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

于 2011-12-12T19:14:04.153 回答