iCloud:KeyValue存储还是文档存储?

时间:2012-12-02 18:21:48

标签: iphone ios xcode ipad icloud

我是iCloud存储的初学者,在构建我的下一个应用程序之前,我希望得到一些关于什么会更好的意见。

这个应用程序需要存储许多包含字符串数组的NSDictionaries,而不需要其他内容。将有365个词典(一年中每天一个),每个词典至少包含8个包含小字符串的数组。我知道这种数据类型可以存储在键值中,但是我没有经验来判断它是否会超过1mb的限制。

所以我的问题是,对于上述情况,我应该在icloud上使用键值还是文档存储?

感谢。

2 个答案:

答案 0 :(得分:2)

如果它可能超过最大限制,您应该考虑将您的词典存储在PLIST文件或核心数据中。

我们假设您要使用PLIST文件。您可以将字典写入保存在文档目录中的文件。然后,使用下面的代码,您可以将PLIST文件从文档目录移动到iCloud,它将同步到您的其他设备。

当您的应用检测到iCloud中存在PLIST文件的更新版本时(您可以在iCloud中检查文件的修改日期并查看它是否比本地存储的文件更新),从iCloud复制并放置它在文件目录中。

//find the URL of your app's ubiquitous container
//setting URLForUbiquityContainerIdentifier to nil returns the URL for the first ubiquitous container in the list in your app's entitlements, you can replace nil with a string
self.ubiquitousURL = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];

//you may want to update self.ubiquitousURL to the documents folder in the ubiquitous container
//self.ubiquitousURL = [self.ubiquitousURL URLByAppendingPathComponent:@"Documents"];

//place the PLIST in iCloud
[[NSFileManager defaultManager] setUbiquitous:YES itemAtURL:plistURL destinationURL:[self.ubiquitousURL URLByAppendingPathComponent:@"file.plist"] error:NULL];

//you have detected there is a new file in iCloud and want to copy it to the documents directory
[[NSFileManager defaultManager] startDownloadingUbiquitousItemAtURL:[self.ubiquitousURL URLByAppendingPathComponent:@"file.plist"] error:NULL];
[[NSFileManager defaultManager] copyItemAtURL:[self.ubiquitousURL URLByAppendingPathComponent:@"file.plist"] toURL:plistURL error:NULL];

self.ubiquitousURL是您的iCloud目录的网址。 plistURL是文档目录中PLIST文件的URL。

答案 1 :(得分:0)

这里有很多选择。您可以使用应用程序的Documents目录存储PLIST,SQLite数据库,或者更好,使用Core Data。您实际上可以使用其中任何一个,并在以后集成iCloud。无论您是否使用iCloud,上述建议都是从最差到最好的。 PList肯定是最简单的。

如果您想了解更多有关Core Data和iCloud的信息,我强烈推荐Stanford的CS193P课程,可在iTunes U上免费获得。