【发布时间】:2014-06-29 01:38:51
【问题描述】:
我有一个简单的基于Core-Data 的应用程序,它是由用户填写一些UITextFields 填充的UITableView,UITableView 通过NSFetchedResultsController 得到更新。
作为一个仅适用于 iOS 7 的应用程序,并且现在在 App Store 中没有启用iCloud,它运行得非常好。然而,是时候介绍 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 编译标记一起粘贴在那里的代码,我是否将它们都放在 App Delegate 中?
2) 在注释说明的情况下,请在调用 -addPersistentStore 时使用这些选项。我该怎么办?我可以看到它是从persistentStoreCoorindator 调用的,但是我在其中放置了哪些确切的选项以进行简单的同步?
3) iCloudPersistentStoreOptions 方法是从哪里调用的?
4) 我是否必须更改 ManagedObjectContext 方法或 PersistentStoreCoordinator 方法中的任何内容?
5) 我是否需要通知UITableView 来刷新 UI?
我已经阅读了很多关于 iOS 5 和 iOS 6 的文章,我想要的是:
应用程序将数据更新到启用 iCloud 的新版本,将信息上传到 iCloud 和具有相同 iCloud 帐户的其他设备,下载该数据。
更新
我昨天花了一些时间解决这个问题,我想我快到了。再次观看 WWDC 视频后,我已经找到了问题 1、2 和 3 的答案,但是我遇到了一个问题,即我的应用程序的 App Store 版本(没有 iCloud)有一些数据,当我上传到新的使用 iCloud 进行开发构建,我的所有数据都没有出现在 UI 中(尽管它确实存在于 Core Data 中,因为我在设备的设置中看到了核心数据备份)。
我使用以下 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..
对于这个问题的任何指导将不胜感激。
【问题讨论】:
-
您可能会发现这个示例应用很有用ossh.com.au/design-and-technology/software-development/…
标签: ios uitableview core-data icloud