gpt4 book ai didi

ios - 使用仅适用于 iOS 7 的应用程序处理 Core Data 和 iCloud 的正确方法

转载 作者:行者123 更新时间:2023-11-29 10:42:56 27 4
gpt4 key购买 nike

我有一个简单的基于 Core-Data 的应用程序,它是一个 UITableView,由用户填充一些 UITextFields,UITableView 得到通过 NSFetchedResultsController 更新。

作为一个仅适用于 iOS 7 的应用程序,现在在没有启用 iCloud 的 App Store 中,它运行得非常好。然而,是时候介绍 iCloud 了。

我花了很长时间阅读有关 iCloud 和 Core Data 的 iOS 7 细节,包括与这个主题相关的 2013 年 WWDC 视频。我也读过优秀的 http://www.objc.io/issue-10/icloud-core-data.html页面引用更简单的方法。我读过这篇优秀的文章 CoreData and iCloud并遵循了 Git 代码,但我很困惑。

问题

我现在的问题不是问题;这是开始的地方。不幸的是,尽管所有帖子都很好,但它们并不适合该领域的新手。

我有几个问题阻止我从完整引用开始:http://www.objc.io/issue-10/icloud-core-data.html .

1) 他用通知和 iCloud Support pragma 标记粘贴在那里的代码,我是否将它们都放在 App Delegate 中?

2) 在评论指出的地方,在对 -addPersistentStore 的调用中使用这些选项。我该怎么办?我可以看到它是从 persistentStoreCoorindator 调用的,但是我在其中放置了哪些确切的选项以进行简单同步?

3) iCloudPersistentStoreOptions 方法从哪里调用?

4) 我是否必须更改 ManagedObjectContext 方法或 PersistentStoreCoordinator 方法中的任何内容?

5) 我是否必须有一个刷新 UI 的通知 UITableView

我已经阅读了很多关于 iOS 5 和 iOS 6 的文章,我想要的是:

应用程序将数据更新到启用 iCloud 的新版本,将信息上传到 iCloud 和具有相同 iCloud 帐户的其他设备,下载该数据。

更新

我昨天花了一些时间弄清楚了这个问题,我想我快到了。再次观看 WWDC 视频后,我已经找到了问题 1、2 和 3 的答案,但是我有一个问题,即我的应用程序的 App Store 版本(没有 iCloud)有一些数据,当我上传到新的使用 iCloud 进行开发构建时,我的所有数据都没有出现在 UI 中(尽管它确实存在于核心数据中,因为我在设备的设置中看到了核心数据备份)。

我使用以下 persistentStoreCoordinator 代码实现了这一点:

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator != nil) {
return _persistentStoreCoordinator;
}

NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Planner.sqlite"];
NSFileManager *fm = [NSFileManager defaultManager];
NSURL *url = [fm URLForUbiquityContainerIdentifier:nil];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
NSDictionary *options = @{
NSMigratePersistentStoresAutomaticallyOption : @YES,
NSInferMappingModelAutomaticallyOption : @YES,
NSPersistentStoreUbiquitousContentNameKey : @"Planner"
};


if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}

return _persistentStoreCoordinator;
}

不过,我还是卡在了上面的问题 4 和 5 上。我是否必须更改 persistentStoreCoordinator 中的任何其他内容,我是否必须更改 NSManagedObjectContext 中的任何内容?最后,问题 5 - 我是否必须更改实际 TableView 中的通知,因为数据没有显示,我怀疑它目前只是没有更新它的 UI..

如果您能就此问题提供任何指导,我们将不胜感激。

最佳答案

  1. 您需要在上下文中设置一个mergePolicy
  2. 您需要确保已实现用于插入/删除/移动行的 NSFetchedResultsController 委托(delegate)方法。
  3. 当您收到 NSPersistentStoreDidImportUbiquitousContentChangesNotification 通知时,您需要在您的上下文队列(例如,如果您使用主线程上下文,则调用主队列)上调用 mergeChangesFromContextDidSaveNotification: 方法。

关于ios - 使用仅适用于 iOS 7 的应用程序处理 Core Data 和 iCloud 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23596377/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com