Cloud Kit Core Data 持久性历史记录事务即使在设置后也不显示作者

Cloud Kit Core Data persistent history transactions not showing author even when set

提问人:joseph ruth 提问时间:2/18/2023 更新时间:2/18/2023 访问量:73

问:

我试图在使用 Objective-C 使用 CloudKit 实现 Core Data 时避免可怕的黑客攻击。我已经掌握了工作正常的基础知识,但我想做的是当核心数据数据库的“外部”(即不是本地)更新进入时,通过选项卡项条目上的徽章或在应用程序的 OSX 部分上加粗按钮在 iOS 应用程序中指示,以告诉用户他们需要在应用程序的某个部分上所做的条目需要应用(比如例如,需要将 Mac 刷新到 iOS 应用程序的 UI 中。

我根本无法让作者或名称属性进入受监视的 NSPersistentHistoryTransactions (s) 或关联的 NSPersistentHistoryChange (s)。我在托管对象上下文(以及各种更新例程中使用的 chid 托管对象上下文)上设置了名称,并且该名称显示在调试消息中,因此正在设置某些内容,但作者属性也没有按预期显示。我确实在 NSPersistentHistoryChange 事务的作者中找到了条目,但它们显示了通用的 CloudKit 委托 (dot) 镜像。

部分是为了学习,部分是出于绝望,我在通知处理程序中设置了以下代码,它可靠且符合预期。

NSDate *date = [NSDate date];
NSDate *newDate = [date dateByAddingTimeInterval:-3600*4];

NSFetchRequest *histdatefetch = NSPersistentHistoryTransaction.fetchRequest;
NSPersistentHistoryChangeRequest *fetchHistoryDateRequest = 
[NSPersistentHistoryChangeRequest fetchHistoryAfterDate:newDate];

NSPersistentHistoryResult *fetchHistoryDateResult = [localAppDelegate.persistentContainer.newBackgroundContext executeRequest:fetchHistoryDateRequest error:&error];

NSArray *tempArrayDate = fetchHistoryDateResult.result;
unsigned long arrayDateCount = [tempArrayDate count];
unsigned long fetchlastDateArrayEntry = arrayDateCount - 1;

NSPersistentHistoryTransaction *tempHistoryTransaction = [tempArrayDate objectAtIndex: fetchlastDateArrayEntry];

long long checkRow = tempHistoryTransaction.transactionNumber;

if ([localAppDelegate.localUpdate isEqualToString:@"YES"]) {
        localAppDelegate.lastLocalRowCount = (int) checkRow;
        localAppDelegate.localUpdate = @"NO";}

在保存时的更新例程中,我将本地更新字符串设置为@“YES”,并假设如果通知启动,顶部的第一个通知是我的本地更新。

我得到了预期的历史事务,它们在更新应用于数据库时构建,等等......然后,我检查当前最后一个持久性历史记录事务的行号,如果任何后续通知的行数不大于该行,则不会点亮徽章或突出显示按钮。

如果有东西进来,但未进行本地更新,则最后一行本地行将为零,指示灯将亮起。如果在本地更新后发生新的远程更新,则远程更新的行号将大于我保存的行号。它之所以有效,是因为它确实是一个单用户应用程序,而且大多数人不会一次使用多个设备,即使它不起作用,最糟糕的情况是你得到多余的指示,你需要按刷新键。不过,哎呀。

如果我能将本地通知与远程通知区分开来,我可以删除所有这些废话,但我似乎无法做到这一点。通知附带的令牌对我没有帮助,我能看到的任何内容的作者或名称属性也没有帮助。

我还没有弄清楚清除逻辑,但是当我检测到正在应用本地事务并删除超过四个小时的所有内容时,我可以很容易地做到这一点。

任何人能提供的任何帮助都是巨大的。

Objective-C 核心数据 CloudKit

评论


答: 暂无答案