【发布时间】:2011-12-09 13:23:58
【问题描述】:
我对 iCloud 的想法有点挣扎,并发布了一个更普遍的问题here。我最大的问题是决定是否应该停止将用户的数据放在应用程序沙箱中的旧文档文件夹中。为了说明我的问题:
据我所知,docs 没有给出答案。假设我有一个处理不同 txt 文件的应用程序。启动应用程序后,我只需检查云中是否有任何 txt 文件,如下所示:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
NSLog(@"AppDelegate: app did finish launching");
self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
// (1) iCloud: init
NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
if (ubiq) {
NSLog(@"User has iCloud enabled! Let's get the txt files from the cloud.");
[self loadDocument];
} else {
NSLog(@"User doesn't have iCloud enabled. App is thus worthless.");
}
return YES;
}
然后我有一种方法可以检查云中是否有任何 txt 文件,如果有,则加载它们。如果没有,我只是在云中创建新的 txt 文件。
这意味着应用程序不会在文档文件夹中存储任何数据。据我了解,一切都在我设备的本地 iCloud 存储中(如果用户离线,也可以访问)或在云中。所以文本文件存在于两个地方:我的设备和云端。
所以根本不需要在我的本地文档文件夹中存储第三个副本,对吧?还是出于某种我忽略的原因,这是必不可少的?换句话说,如果我向我的用户提供 iCloud,我应该使用本地文档文件夹做什么? (我可以直接忽略那些不会注册 iCloud 的人吗?)
编辑:澄清一下,当我谈论应用程序沙箱中的标准文档文件夹时,我指的是这个:
NSArray *paths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
【问题讨论】:
-
物有所值;如果用户启用了备份,iCloud 将backup Document 目录。
-
另一个 FWIW:我不会忽略未启用 iCloud 的用户。大多数 Apple 开发文档都谈到能够在用户启用/禁用您的应用时将数据迁移到 iCloud。
-
@quixoto:我明白你的意思,但是你不觉得让同一件事的三个副本漂浮在你身边吗?另外,迁移数据的最佳方法是什么?看来我需要同时做两件事:关心 iCloud 并保存到我的目录。我什么时候做这个?在将数据推送到云时,我是否在 UIDocument 中实现此功能?所有这一切都让人感觉如此复杂,因为我需要担心两组数据,我需要一直保持同步。为什么用户不启用 iCloud?
-
我绝对不会忽视非 iCloud 用户。如果用户只有一台设备,则 iCloud 文档存储没有任何好处(在 iCloud 存储中存储文档仅对保持多台设备同步有用)。
-
@Ron 好吧,即使您只有一台设备,您也可以使用备份功能,即您希望您的文档(尤其是包含重要信息的小 txt 文件)始终备份到云。
标签: iphone ios cocoa-touch ipad icloud