【问题标题】:How to use Sample Code of "Core Data with iCloud" session 227 in WWDC 2012?如何在 WWDC 2012 中使用“Core Data with iCloud”会话 227 的示例代码?
【发布时间】:2012-11-22 23:25:38
【问题描述】:

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

我从苹果 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”方法时停止,我收到此错误消息“在包中找不到本地存储,这可能是构建问题,请确保将存储文件作为包资源复制。”

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

但是虽然我跳过了那部分(评论它),但无法连接 iCloud,因为现在我收到了这个错误消息 “无法添加 iCloud 商店:Error Domain=NSCocoaErrorDomain Code=134100”操作无法完成。 (可可错误 134100。)“UserInfo=0x1dd93040 {metadata={ NSPersistenceFrameworkVersion = 419;"

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

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

谢谢。

【问题讨论】:

    标签: iphone core-data ios6 icloud


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 非常感谢,你永远不知道我是如何感谢你的。我一直在等待几天的答复。非常感谢您的回复。
    • 我之前在 iOS 5 上使用 iCloud 核心数据的代码运行良好。但我决定不使用它,因为它很少引起严重问题。这就是为什么我想在 iOS6 中使用新代码。
    • 非常感谢您的好意。我的电子邮件地址是 benevbright@gmail.com。如果发送您当前的代码也可以,我想让您的代码学习。总之非常感谢!上帝保佑你,圣诞快乐!
    • @BrightLee 刚刚向您发送了文件。我仍在研究将 iCloud 集成到我的应用程序中,所以我还没有最终的解决方案。
    • 致大家:很抱歉,在与 Apple 确认后,我不允许分享更新的 SharedCoreData 代码。 Apple 声明如下:“尽管我感谢您愿意与您的开发人员分享知识,但请不要将此示例代码分发给其他人,因为它是预发布的,尚未正式发布。感谢您的理解。”我最近没有检查,所以我想知道他们是否已经发布了更新版本。
    猜你喜欢
    • 2011-03-07
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 2011-06-03
    • 2012-12-15
    相关资源
    最近更新 更多