我为了解决这个问题花了几周时间。 所以请帮我解决这个问题。
我从苹果WWDC 2012下载了iCloud的核心数据示例代码。并尝试将其用于我的应用程序,但没有任何效果。
当然,我稍微修改了一些代码..但我不确切知道应该做什么,也找不到任何关于它和教程的网站..
我已经度过了几个星期,我很累。我知道这是因为我缺乏技巧。
我面临的问题是......
- (void)asyncLoadPersistentStores {
NSError *error = nil;
if ([self loadLocalPersistentStore:&error]) {
NSLog(@"Added local store");
} else {
NSLog(@"Unable to add local persistent store: %@", error);
}
//if iCloud is available, add the persistent store
//if iCloud is not available, or the add call fails, fallback to local storage
BOOL useFallbackStore = NO;
if ([self iCloudAvailable]) {
if ([self loadiCloudStore:&error]) {
NSLog(@"Added iCloud Store");
//check to see if we need to seed data from the seed store
if (SEED_ICLOUD_STORE) {
//deleted because SEED_ICLOUD_STORE value is false
}
//check to see if we need to seed or migrate data from the fallback store
NSFileManager *fm = [[NSFileManager alloc] init];
if ([fm fileExistsAtPath:[[self fallbackStoreURL] path]]) {
//migrate data from the fallback store to the iCloud store
//there is no reason to do this synchronously since no other peer should have this data
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(globalQueue, ^{
NSError *blockError = nil;
BOOL seedSuccess = [self seedStore:_iCloudStore
withPersistentStoreAtURL:[self fallbackStoreURL]
error:&blockError];
if (seedSuccess) {
NSLog(@"Successfully seeded iCloud Store from Fallback Store");
} else {
NSLog(@"Error seeding iCloud Store from fallback store: %@", error);
abort();
}
});
}
} else {
NSLog(@"Unable to add iCloud store: %@", error);
useFallbackStore = YES;
}
} else {
useFallbackStore = YES;
}
if (useFallbackStore) {
if ([self loadFallbackStore:&error]) {
NSLog(@"Added fallback store: %@", self.fallbackStore);
//you can seed the fallback store if you want to examine seeding performance without iCloud enabled
//check to see if we need to seed data from the seed store
if (SEED_ICLOUD_STORE) {
//deleted
}
} else {
NSLog(@"Unable to add fallback store: %@", error);
abort();
}
}
}
这是我在CoreDataController.m中的源代码的一部分(WWDC 2012 session 227) 然后,程序在调用“loadLocalPersistentStore”方法时停止,并且我收到此错误消息“在bundle中找不到本地存储,这可能是构建问题,请确保将存储文件复制为bundle资源。”
我想我得到这个的原因是我没有像示例那样的localStore.sqlite和fallbackStore.sqlite文件。所以它会犯错误。
但是虽然我跳过那部分(评论它),但无法连接iCloud,因为现在我收到了此错误消息 “无法添加iCloud存储:错误域= NSCocoaErrorDomain代码= 134100”操作无法完成。 (可可错误134100.)“UserInfo = 0x1dd93040 {metadata = { NSPersistenceFrameworkVersion = 419;“
我在iOS5上使用iCloud学到了很多关于核心数据的知识,而且它的工作非常完美。但现在我就像一个愚蠢的人。我无能为力。请帮帮我。
奇怪的是,没有关于iCloud app ID的代码,来自apple的示例代码中的url。
感谢。
答案 0 :(得分:5)
我在尝试从Apple WWDC 2012实施示例iCloud代码时也遇到了问题。我在Apple Developer Support上打开了一张票,这是2012年11月15日的回复。
一些开发人员在使用来自WWDC的样本采用iCloud和Core Data时遇到了问题。但是,我有一个更新的SharedCoreData示例(从WWDC改进),我认为你应该使用它。 CoreDataController对象仍然存在,但已被清理和改进。我建议先运行该示例,看看它是否在iOS设备之间正确同步。在继续进行更改之前,首先执行此操作非常重要。这样你就可以获得良好的基线。验证完成后,继续将它的CoreDataController用于您的应用程序。
他提到CoreDataController类已更改。 AppDelegate也发生了变化。添加了新方法,代码现在更清晰。我几乎让我的iCloud工作在我的应用程序上,但仍然存在初始文件上传的问题。试着解决这个问题吧。使用未经修改的代码运行更新的SharedCoreData应用程序非常有效!所以这是一个很好的起点。
我不知道如何获得这个新代码,除了打开Apple开发人员支持的门票(每次50美元)。新项目(仍称为SharedCoreData)的大小仅为1 MB。如果您愿意,我愿意通过电子邮件发送给您。
当我找到我的应用程序的初始文件上传解决方案时,我会在此处发布更新。