【问题标题】:Application with CloudKit and Coredata for the local storage. How to cope with the order of CKSubscritpion notifications带有 CloudKit 和 Core Data 的应用程序用于本地存储。如何应对订阅通知的顺序
【发布时间】:2017-06-30 23:56:47
【问题描述】:

您好,我创建了一个 macOS 可可应用程序,它使用 Cloudkit 和 Coredata 来存储存储的本地副本。我的应用程序有一个“项目”记录,它将 CKReferences 存储到“子项目”。本地存储通过使用触发 Core Data 代码以创建/更新本地对象的 CKSubscription 通知来维护。问题是,如果我创建一个带有子项目的新项目,然后在另一台 Mac 上启动该应用程序,则另一个副本可能比该项目更早地收到子项目创建通知。因此,代码接收到子项,但此时还没有对应的 Core Data 对象可用。有没有人想出一个很好的模式来解决这个问题?

【问题讨论】:

    标签: objective-c cocoa core-data cloudkit


    【解决方案1】:

    使用同步 API。 Apple 建议您仅使用订阅来获得通知,即某些事情发生了变化,而不是什么。当您收到通知时,获取自上次更新以来所做的所有更改。

    【讨论】:

      【解决方案2】:

      Apple 的 Notes 应用程序也面临同样的问题,其中包含包含笔记的文件夹和包含附件的笔记,即他们无法下载尚不存在的文件夹中的笔记。他们如何解决它是使用私有类CKRecordGraph 和方法+ (id)topologicallySortRecords:(id)arg1 withError:(id *)arg2;,它根据CKReferences 进行排序,因此他们确保在内部的注释之前上传文件夹(即引用包含文件夹) .由于客户端会按顺序下载更改,因此其他客户端无法在文件夹之前下载注释。您可能还想尝试使用占位符对象,以便创建对象但稍后填写信息。您可以通过使用私有类进行实验,然后提供您自己的基本实现,可能为您自己的实体定制,例如始终将父实体排序在子实体之前。这是CKRecordGraph 的标题,也许有一天它会公开(我提交了反馈 FB6117775 请求它)。

      //
      //     Generated by class-dump 3.5-MH (64 bit).
      //
      //     class-dump is Copyright (C) 1997-1998, 2000-2001, 2004-2015 by Steve Nygard.
      //
      
      #import <objc/NSObject.h>
      
      @class NSArray, NSMutableArray;
      
      @interface CKRecordGraph : NSObject
      {
          NSMutableArray *_nodes;
          NSArray *_sortedRecords;
      }
      
      @property (strong, nonatomic) NSMutableArray *nodes; // @synthesize nodes=_nodes;
      @property (strong, nonatomic) NSArray *sortedRecords; // @synthesize sortedRecords=_sortedRecords;
      
      + (id)topologicallySortRecords:(id)arg1 withError:(id *)arg2;
      - (BOOL)addRecords:(id)arg1 error:(id *)arg2;
      - (id)description;
      - (id)init;
      - (id)recordsByTopologicalSortWithError:(id *)arg1;
      
      @end
      

      【讨论】:

        猜你喜欢
        • 2012-12-28
        • 1970-01-01
        • 2012-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-18
        • 1970-01-01
        相关资源
        最近更新 更多