适用于Mac OS X Lion的iCloud支持

时间:2012-01-16 14:01:52

标签: objective-c nsfilemanager icloud

在Mac OS X(10.7 Lion)非基于文档的应用程序中,我希望包含iCloud支持,以便我可以在其他Mac上的同一应用程序的其他实例之间共享数据(而不是iOS设备)。稍微浏览Apple文档之后,我发现我应该在iCloud中使用键值列表存储,因为我要上传的文档只包含一个自定义对象数组(具有简单属性,如名称(字符串)) ,日期(日期对象),......)。这个文件是我唯一要上传到iCloud的文件。在应用程序中,我已经实现了使用NSFileManager的{​​{1}}(或者其他任何内容,我已经忘记了)将文件保存到磁盘。它再次使用- (void)writeData:(NSData*)data toPath:(NSString *)path从文件加载(使用NSFileManager或其他任何内容)。该文件存储在用户的Application Support目录中的子目录中。只要将新项添加到数组中,或者修改了数组中的项,就会保存它。

我想知道是否有人可以提供指向教程的链接,或指向正确的方向,将该文件写入iCloud,然后在同一应用程序的其他实例上再次下载?我发现的所有教程和文档都只适用于iOS。任何帮助将不胜感激!

提前致谢!

1 个答案:

答案 0 :(得分:3)

只需使用NSUbiquitousKeyValueStore,这与NSUserDefaults非常相似,只不过它是写入iCloud的。您应该阅读Mac App编程指南的iCloud Storage部分,但您需要做的事情可能就像在Xcode中的App Target的Summary选项卡中启用权利一样简单,然后执行以下操作:

NSData *dataToStore = [NSKeyedArchiver dataWithRootObject:yourArray];
[[NSUbiquitousKeyValueStore defaultStore] setData:dataToStore forKey:@"yourKey"]; 

然后,要检索您的数据,只需执行

NSData *retrievedData = [[NSUbiquitousKeyValueStore defaultStore] dataForKey:@"yourKey"];
NSArray *retrievedArray = [NSKeyedUnarchiver unarchiveObjectWithData:retrievedData];

这里需要注意的是,为了使用一组自定义对象,这些对象必须全部实现NSCoding protocol。这只是实现两种方法的问题;这是一个很好的tutorial

P.S。无论您是为OS X还是iOS开发,都使用相同的API,因此没有理由不能只关注iCloud存储的iOS教程。