如何在WWDC 2012中使用"核心数据与iCloud"会话227的示例代码?

Bri*_*Lee 1 iphone core-data icloud ios6

我有几个星期的时间来解决这个问题..所以请帮我解决这个问题.

我从苹果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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这是来自CoreDataController.m(WWDC 2012会话227)的源代码的一部分然后,程序在调用"loadLocalPersistentStore"方法时停止,我收到此错误消息"在bundle中找不到本地存储,这可能是构建问题,make确保将商店文件复制为捆绑资源."

我想我得到这个的原因是我没有像样本那样的localStore.sqlite和fallbackStore.sqlite文件.所以它会犯错误.

但虽然我跳过那部分(评论它),无法连接iCloud,因为现在我收到此错误消息"无法添加iCloud存储:错误域= NSCocoaErrorDomain代码= 134100"操作无法完成.(可可错误134100.)"UserInfo = 0x1dd93040 {metadata = {NSPersistenceFrameworkVersion = 419;"

我在iOS5上使用iCloud学到了很多关于核心数据的知识,而且它的工作非常完美.但现在我就像一个愚蠢的人.我无能为力.请帮帮我.

奇怪的是没有关于iCloud应用程序ID的代码,来自apple的示例代码中的url.

谢谢.

Jim*_*ion 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.如果您愿意,我愿意通过电子邮件发送给您.

当我找到我的应用程序的初始文件上传解决方案时,我会在这里发布更新.