在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。任何帮助将不胜感激!
提前致谢!
本
答案 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教程。