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

时间:2012-12-05 07:13:34

标签: iphone core-data ios6 icloud

我为了解决这个问题花了几周时间。 所以请帮我解决这个问题。

我从苹果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。

感谢。

1 个答案:

答案 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。如果您愿意,我愿意通过电子邮件发送给您。

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