当用户在应用程序设置包中启用或禁用iCloud支持时该怎么办?

时间:2013-12-03 12:19:17

标签: ios objective-c core-data icloud uimanageddocument

我定位 iOS7 ,我使用 iCloud UIManagedDocument。我想知道在这两种情况下该怎么做:

1) 第一种情况:应用首次启动

这是第一次发布,当我们还不知道用户是否想要使用iCloud时,我们应该假设他不想在我们问他之前使用它。一旦我们发现,他的选择将存储在应用程序设置包中,他将能够在以后改变主意。

当我的应用启动时,出现的第一个视图会触发带有[[UIManagedDocument alloc] initWithFileURL:url]的UIManagedDocument init。这样做是因为它应该知道它必须在表中显示多少行。

此时,它是第一次启动,我仍然要向用户询问,我认为他不想使用iCloud,因此在没有设置persistentStoreOptions的情况下初始化UIManagedDocument({{1} }和NSPersistentStoreUbiquitousContentNameKey)。

然后使用

在磁盘上创建文件
NSPersistentStoreUbiquitousContentURLKey

然后出现视图。由于它是第一次发布,我应该询问用户是否要使用iCloud。

我在[UIManagedDocument saveToURL: URL forSaveOperation: UIDocumentSaveForCreating completionHandler: ^(BOOL success){ if(success){ //Do something with the document } }];

中显示UIAlertView

如果他回答“ ”,一切都已经好了。但如果他说“ ”,我该怎么办?

我应该关闭[viewDidAppear:animated]并迁移数据库,还是足以在文档UIManagedDocument中设置NSPersistentStoreUbiquitousContentNameKeyNSPersistentStoreUbiquitousContentURLKey

2) 第二种情况:几天后用户改变主意

用户确实选择启用iCloud,但有一天他改变主意。他在应用设置包中切换到NO iCloud选项。当应用程序启动时,我检查此选项的更改,我发现它已从YES切换到NO。正如我从SO得到的提示中所理解的那样,正确的路径应该是显示一个UIAlertView询问他是否愿意:

a)将文件保存在设备上

b)从设备中删除文件

c)继续使用iCloud

我应该为选项a)和b)做些什么? 选项a)的数据库迁移,并从选项b)的零重新创建数据库?

2 个答案:

答案 0 :(得分:0)

您使用术语“迁移”的方式有点令人困惑,因为将Core Data模型从一个版本增加到一个新版本也称为迁移。我假设你只是在谈论从iCloud“迁移”到本地,反之亦然。

在您的第一种情况下,在用户做出选择之前,我不会创建UIManagedDocument。如果用户想要使用iCloud,您只需要将其打开并打开它,您就不必担心关闭/删除本地文档(现在没有意义)。

在第二种情况下,如果用户选择选项A,则将文件从iCloud复制到本地,然后将其从iCloud中删除。选项B的意思是“从iCloud中移除,我不再需要它了”。如果您仍希望继续在本地使用Core Data,请为其创建新文档。当然,C什么都不做,只是解除警报。

答案 1 :(得分:0)

通常有两个地方可以检查iCloud设置是否已更改和/或检查或打开任何文件: 1)在AppDelegate方法应用程序中:didfinishlaunchingwithoptions,和 2)在AppDelegate方法applicationwillenterforeground

此外,如果您注册iCloud帐户更改通知,您可以回复它们。

这允许您在视图开始尝试显示任何核心数据项之前组织内容。打开或迁移文件可能需要一些时间,因此在执行此操作时可能必须显示一些其他活动指示器视图。

我不会在显示数据的视图中创建文档,因为打开文档的调用是异步执行的,直到完成处理程序运行,您不知道它何时完成。相反,您应该使用完成处理程序来启动此视图,因为您知道开始访问核心数据对象是安全的。

有关如何在此处实现UIManagedDocument & iCloud Integration的详细信息。