1

我正在努力解决这个问题几周。所以请帮我解决这个问题。

我从苹果 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 会话 227)的源代码的一部分,然后,程序在调用“loadLocalPersistentStore”方法时停止,我收到此错误消息“在捆绑包中找不到本地存储,这可能是构建问题,请确保将存储文件作为捆绑资源复制。”

我猜我得到这个的原因是我没有像示例这样的 localStore.sqlite 和 fallbackStore.sqlite 文件。所以它会出错。

但是虽然我跳过了那部分(评论它),但无法连接 iCloud,因为现在我收到此错误消息“无法添加 iCloud 商店:错误域 = NSCocoaErrorDomain 代码 = 134100”操作无法完成。(可可错误 134100。)“UserInfo=0x1dd93040 {元数据={ NSPersistenceFrameworkVersion = 419;”

我在 iOS5 上通过 iCloud 学到了很多关于核心数据的知识,而且它运行得几乎完美。但现在我就像一个愚蠢的人。我无能为力。请帮帮我。

奇怪的是没有输入关于 iCloud 应用程序 ID 的代码,在苹果的示例代码中没有 url。

谢谢。

4

1 回答 1

5

我在尝试实现 Apple WWDC 2012 中的示例 iCloud 代码时也遇到了问题。我向 Apple Developer Support 开了一张票,这是他们在 2012 年 11 月 15 日的回复。

一些开发人员在采用 iCloud 和 Core Data 以及来自 WWDC 的样本时遇到了问题。但是,我有一个更新的 SharedCoreData 示例(从 WWDC 改进),我认为您应该使用它。CoreDataController 对象仍然存在,但已被清理和改进。我建议先运行该示例,看看它是否在 iOS 设备之间正确同步。在继续进行更改之前先运行这一点很重要。这样你就可以得到一个很好的基线。一旦你确认它可以工作,继续将它的 CoreDataController 应用到你的应用程序中。

他提到 CoreDataController 类已经改变。AppDelegate 也发生了变化。添加了新方法,现在代码更干净了。我的 iCloud 几乎可以在我的应用程序上运行,但初始文件上传仍然存在问题。现在正试图解决这个问题。使用未修改的代码运行更新的 SharedCoreData 应用程序可以完美运行!所以这是一个很好的起点。

除了向 Apple Developer Support 开票(每次 50 美元)外,我不知道您将如何获得此新代码。新项目(仍命名为 SharedCoreData)只有 1 MB 大小。如果您愿意,我愿意通过电子邮件将其发送给您。

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

于 2012-12-08T00:23:54.533 回答