应用程序未与 iCloud 同步核心数据更改

2024-03-18

我设置了一些 NSLogs 以确保我的应用程序与 iCloud 同步更改,但我已经等了半个小时并且更改没有同步。这是我的核心数据代码。核心数据存储存储在文档目录中,因为我希望它在失去对 iCloud 的访问时能够继续工作,并且不希望它在这种情况下丢失数据库。

核心数据正常设置和更改数据,但似乎不与 iCloud 同步。

- (void)mergeChangesFromiCloud:(NSNotification *)notification {
    NSLog(@"changes from iCloud");
    NSManagedObjectContext* moc = [self managedObjectContext];

    [moc performBlock:^{

        [moc mergeChangesFromContextDidSaveNotification:notification];

        NSNotification* refreshNotification = [NSNotification notificationWithName:@"SomethingChanged"
                                                                            object:self
                                                                          userInfo:[notification userInfo]];

        [[NSNotificationCenter defaultCenter] postNotification:refreshNotification];
    }];
}

#pragma mark - Core Data Objects

- (NSManagedObjectContext *)managedObjectContext
{
    if (_managedObjectContext != nil) {
        return _managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {

        _managedObjectContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

        [_managedObjectContext performBlockAndWait:^{
        [_managedObjectContext setPersistentStoreCoordinator:coordinator];
        [[NSNotificationCenter defaultCenter]addObserver:self
                                                selector:@selector(mergeChangesFromiCloud:)
                                                    name:NSPersistentStoreDidImportUbiquitousContentChangesNotification
                                                  object:coordinator];
        }];

    }
    return _managedObjectContext;
}

- (NSManagedObjectModel *)managedObjectModel {

    if (_managedObjectModel != nil) {
        return _managedObjectModel;
    }

    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:DATABASE_MODEL_URL];

    return _managedObjectModel;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    NSURL *storeURL = [NSURL fileURLWithPath:STORE_PATH];

    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    NSMutableDictionary *options = [NSMutableDictionary dictionary];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
    [options setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSURL *iCloud = [fileManager URLForUbiquityContainerIdentifier:nil];
    NSLog(@"icloud: %@", iCloud);
    if (iCloud) {

        NSString *iCloudLogsDirectoryName = @"Logs";
        NSURL *iCloudLogsPath = [NSURL fileURLWithPath:[[iCloud path] stringByAppendingPathComponent:iCloudLogsDirectoryName]];

        //Create logs directory, in case it doesn't exist
        if([fileManager fileExistsAtPath:[iCloudLogsPath path]] == NO) {
            NSLog(@"logs directory doesn't exist");
            NSError *fileSystemError;
            [fileManager createDirectoryAtPath:[[iCloud path] stringByAppendingPathComponent:iCloudLogsDirectoryName]
                   withIntermediateDirectories:YES
                                    attributes:nil
                                         error:&fileSystemError];
            if(fileSystemError != nil) {
                NSLog(@"Error creating database directory %@", fileSystemError);
            }

        NSString *iCloudEnabledAppID = @"ID REMOVED FROM STACK OVERFLOW";

        [options setObject:iCloudEnabledAppID            forKey:NSPersistentStoreUbiquitousContentNameKey];
        [options setObject:iCloudLogsPath                forKey:NSPersistentStoreUbiquitousContentURLKey];

        [_persistentStoreCoordinator lock];

        [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                          configuration:nil
                                    URL:storeURL
                                options:options
                                  error:nil];

        [_persistentStoreCoordinator unlock];

        }

        else {

            [_persistentStoreCoordinator lock];

            [_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                              configuration:nil
                                        URL:storeURL
                                    options:options
                                      error:nil];

            [_persistentStoreCoordinator unlock];
        }

    }

    [[NSNotificationCenter defaultCenter] postNotificationName:@"SomethingChanged" object:self userInfo:nil];


    return _persistentStoreCoordinator;
}

编辑:问题是 addPersistantStore 代码在括号中的位置错误。它应该低一个括号。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应用程序未与 iCloud 同步核心数据更改 的相关文章

随机推荐

  • 如何用省略号隐藏多余的 div?

    我有一个标签输入字段 我需要显示尽可能多的内容 适合它周围的假 输入 div 如下所示 div class btn btn secondary span class tag Tag 1 span span class tag Tag 2 s
  • git 可以配置为不对某些文件执行 autocrlf 吗?

    我在一个部署到 Windows Linux 和 Mac 客户端的 Java 项目上使用 git 对于这个 Java 项目 我还维护 sh 脚本 用于在 Mac Linux 上运行编译后的二进制文件 exe 用于在 Windows 上运行编译
  • 生成多个pandas数据框

    我正在从网站检索 csv 格式的多个数据框 我将数据帧保存在一个空列表中 然后一一读取 我无法将它们附加到单个数据框中 因为它们具有不同的列名称和列顺序 所以我有以下问题 我可以在用于读取文件的循环内创建一个具有不同名称的数据框 这样我就可
  • MinGW 的 msvcrt 替代品? (例如,获得符合要求的 snprintf)

    所以这是一个有趣的 我们有一些 C 库should与平台无关 即使它们是在 Linux 上开发的 因为它们仅依赖于 ISO IEC 9899 1999 中定义的 C 标准库 当我们用 MinGW 编译这些库时 一开始一切似乎都工作正常 但今
  • 这是什么类型的图表?可以使用 ggplot2 创建它吗?

    我有这张图表 我正在尝试复制 它有两个 X 轴和 Y 轴连续变量 并用一条线绘制这两个变量之间随时间变化的关系 我的问题有两个部分 首先 这种类型的图表叫什么 这是不寻常的 因为点之间的线是由第三个变量 年份 决定的 而不是它们在 X 轴上
  • SQL Server集成身份验证模式

    我想知道何时在 Web 应用程序的连接字符串中使用 Windows 身份验证模式 应用程序本身使用 Windows 身份验证进行授权 将使用哪个帐户登录 SQL Server 不是web应用程序池帐号吗 使用 Windows 身份验证登录
  • 突然间无法再在 IntelliJ 中运行 Kotlin 测试

    我有一个大型 Kotlin 项目 其中包含为 KotlinTest 编写的大约 2500 个单元测试 该项目是一个 Gradle 项目 我能够从 Gradle 任务运行所有测试 但通常我从编辑器运行它们 我可以通过单击 运行 图标从编辑器运
  • 运行 android 时出错:Gradle 项目同步失败。请修复您的项目并重试

    Android Studio 1 2 RC0 不断告诉我Error running android Gradle project sync failed Please fix your project and try again 我怎样才能
  • 远程 Web 应用程序调试在 ios 8 beta 中不起作用

    我正在尝试在模拟器上调试 ios 8 beta 下的 Web 应用程序 运行最新版本的 safari 版本 7 0 6 和 Xcode 但我在 safari 中只能看到 没有可检查的应用程序 有什么建议 您需要最新的 Safari 每晚版本
  • 无法在 Web 服务器上启动调试。 Web 服务器找不到所请求的资源

    我在尝试调试 ASP NET MVC 应用程序时遇到此错误 我已将应用程序设置为 使用本地 IIS Web 服务器 并选择 ASP NET 作为调试器 在不进行调试的情况下运行该网站效果很好 但是当我尝试调试时 出现以下错误 Unable
  • Python 文件操作

    我用这个 python 程序得到了一个错误 IOError Errno 0 Error from sys import argv file open test txt a print file tell not at the EOF pla
  • groupByKey(...) 中的 类在其成员中有一个 Map。 groupByKey 操作因“不可比较”问题而失败

    我有课Entreprise具有基元数据类型和另一个类上的 Map Etablissement它仅由原始数据类型组成 public class Entreprise implements Comparable
  • FnBox 示例抛出错误:盒装中没有 FnBox?

    我尝试运行FnBox示例来自官方文档 https doc rust lang org 1 27 0 std boxed trait FnBox html但它会抛出一个错误 error E0432 unresolved import std
  • Android 蓝牙 Le 扫描仪在一段时间后停止

    我正在使用活动的蓝牙 LE 扫描仪运行应用程序或服务 并在日志控制台上显示扫描结果 如果我把手机锁在桌子上不再碰 一段时间后它停止了 并且没有给我更多的扫描结果 如果我按下电源按钮并且屏幕唤醒 它会给我更多扫描结果 如果我再次锁定屏幕或等待
  • 在 macOS 上通过终端启动 Spyder 时出现 kq_init 警告

    我在 Mac 上运行 Spyder High Sierra 我有 2 个使用 Anaconda 定义的虚拟环境 对于 python 2 7 13 虚拟环境是 py27 对于 python 3 65 虚拟环境是 py36 当我转到 py36
  • 使用 dup2 时的竞争条件

    这个联机帮助页 http linux die net man 2 dup2为了dup2系统调用说 EBUSY 仅限 Linux 这可能会在执行期间由 dup2 或 dup3 返回 open 2 和 dup 的竞争条件 它谈论什么竞争条件以及
  • Chart_Series() 是否适用于对数轴?

    有没有办法产生对数 y 轴chart Series 我正在使用实验chart Series 而不是chartSeries 中的方法quantmod 因为在绘图中添加额外的线时更方便 library quantmod POWR lt getS
  • Qt:如何检测是否选择了某个小部件?

    我没有看到任何信号 槽 函数可以告诉我鼠标是否选择了某个小部件 是否可以有这样一个函数来告诉我当前的QWidget是否被选中 我如何区分 当前小部件被选择 和 其子小部件之一被选择 您可以使用以下命令检查小部件的焦点hasFocus 功能
  • C++ 中的 Bron Kerbosch 算法

    我一直在练习我的 C 算法知识 并陷入了标准 BK 实现 该算法输出了太多的派系 我似乎不明白为什么 我将图表示为邻接列表 vector lt list
  • 应用程序未与 iCloud 同步核心数据更改

    我设置了一些 NSLogs 以确保我的应用程序与 iCloud 同步更改 但我已经等了半个小时并且更改没有同步 这是我的核心数据代码 核心数据存储存储在文档目录中 因为我希望它在失去对 iCloud 的访问时能够继续工作 并且不希望它在这种