iOS 13中与历史相关的联系人框架类是什么?

iOS 13中与历史相关的联系人框架类是什么?,ios,ios13,cncontactstore,Ios,Ios13,Cncontactstore,iOS 13中新增了一系列与历史相关的类,如CNChangeHistoryEvent和CNChangeHistoryFetchRequest。没有任何文档,我能找到的任何WWDC 2019视频中也没有提到它们。它们是干什么用的?我如何使用它们?API的运行方式应该是,您可以将“令牌”传递给更改历史记录请求,它将为您提供自该令牌之后添加/删除/更新的联系人(或组) 到目前为止,我只能“运行”历史记录获取请求,如下所示: CNChangeHistoryFetchRequest *fetchH

iOS 13中新增了一系列与历史相关的类,如CNChangeHistoryEvent和CNChangeHistoryFetchRequest。没有任何文档,我能找到的任何WWDC 2019视频中也没有提到它们。它们是干什么用的?我如何使用它们?

API的运行方式应该是,您可以将“令牌”传递给更改历史记录请求,它将为您提供自该令牌之后添加/删除/更新的联系人(或组)

到目前为止,我只能“运行”历史记录获取请求,如下所示:

    CNChangeHistoryFetchRequest *fetchHistory = [[CNChangeHistoryFetchRequest alloc] init];
    fetchHistory.startingToken = [[NSUserDefaults standardUserDefaults] dataForKey:@"CNContactChangeHistoryToken"];

    NSError *error = nil;

    CNContactStore *store = [[CNContactStore alloc] init];
    CNFetchResult *fetchResult = [store enumeratorForChangeHistoryFetchRequest:fetchHistory error:&error];

    NSEnumerator *enumerator = [fetchResult value];
    id object;

    while ((object = [enumerator nextObject])) {
        // do something with object
        NSLog(@"change history enumerator object = %@", object);
        CNChangeHistoryEvent *historyEvent = (CNChangeHistoryEvent *) object;
        if ([historyEvent isKindOfClass:[CNChangeHistoryDropEverythingEvent class]]) {
            NSLog(@"change history - DROP EVERYTHING!");
            [historyEvent acceptEventVisitor: self];
        } else {
            if ([historyEvent isKindOfClass:[CNChangeHistoryAddContactEvent class]]) {
                CNChangeHistoryAddContactEvent *addContactEvent = (CNChangeHistoryAddContactEvent *) object;
                NSLog(@"change history - AddContact event container %@ - %@", addContactEvent.containerIdentifier, addContactEvent.contact);
            } else if ([historyEvent isKindOfClass:[CNChangeHistoryUpdateContactEvent class]]) {
                CNChangeHistoryUpdateContactEvent *updateContactEvent = (CNChangeHistoryUpdateContactEvent *) object;
                NSLog(@"change history - UpdateContact event - %@", updateContactEvent.contact);
            } else if ([historyEvent isKindOfClass:[CNChangeHistoryDeleteContactEvent class]]) {
                CNChangeHistoryDeleteContactEvent *deleteContactEvent = (CNChangeHistoryDeleteContactEvent *) object;
                NSLog(@"change history - DeleteContact event - %@", deleteContactEvent.contactIdentifier);
            }
        }
    }

枚举将运行,它始终是“CNChangeHistoryDropEverythingEvent”事件,然后是整个联系人列表的“添加联系人”和“添加组”事件。这是因为我找不到任何地方获取当前令牌的方法。“fetchResult”对象应该有一个
currentHistoryToken
,但它始终为零;CNContactStore的
currentHistoryToken
对象也是如此。因此,我不确定从何处获取该API,以便下次可以将其传递到
startingToken

此API是否有任何进展?现在是2020年4月,苹果的文档仍然说“没有概述”!哈。。。我很确定API中的一大块不会像那样泄漏,或者至少如果是这样的话,它也不会在后续发布中出现。我曾有机会在WWDC19上与联系人团队中的某个人交谈(非常简短),询问他们关于新API的情况,他们说他们“很快”就会有相关文档。但是(就像苹果的其他团队一样),他们没有做到这一点。