gpt4 book ai didi

ios - 如何使用 CNContactStoreDidChangeNotification 获取新添加的联系人标识符?

转载 作者:行者123 更新时间:2023-12-01 23:24:15 26 4
gpt4 key购买 nike

我想要获取所有新添加的联系人标识符。

这是我的代码:

-(void)viewWillAppear:(BOOL)animated {

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addressBookDidChange:) name:CNContactStoreDidChangeNotification object:nil];
}

-(void)addressBookDidChange:(NSNotification*)notification
{
//Handle event here...
NSDictionary *dict = notification.userInfo;
NSLog(@"Notification - %@",dict);

}

CNNotificationSaveIdentifiersKey 数组始终为空。

 Notification - {
CNNotificationOriginationExternally = 1;
CNNotificationSaveIdentifiersKey = (
);
CNNotificationSourcesKey = (
);
}

最佳答案

iOS 13 为此添加了一个 API,但遗憾的是它只能通过 Objective-C 代码访问:enumeratorForChangeHistoryFetchRequest:error:

要从 Swift 使用它,您需要创建一个包装器:

CNContactStore+ChangeHistory.h

#import <Contacts/Contacts.h>

NS_ASSUME_NONNULL_BEGIN
@interface CNContactStore (ChangeHistory)
- (CNFetchResult<NSEnumerator<CNChangeHistoryEvent *> *> *)swiftEnumeratorForChangeHistoryFetchRequest:(CNChangeHistoryFetchRequest *)request
error:(NSError * _Nullable *)error;
@end

CNContactStore+ChangeHistory.m

#import "CNContactStore+ChangeHistory.h"

@implementation CNContactStore (ChangeHistory)
- (CNFetchResult<NSEnumerator<CNChangeHistoryEvent *> *> *)swiftEnumeratorForChangeHistoryFetchRequest:(CNChangeHistoryFetchRequest *)request
error:(NSError * _Nullable *)error
{
return [self enumeratorForChangeHistoryFetchRequest:request error:error];
}
@end

为了确保您只获得新的更改(而不是完整的更改历史记录),您需要在获取联系人时保存 CNContactStore().currentHistoryToken。然后稍后在 CNChangeHistoryFetchRequest 中传递此 token :

var myToken = myContactStore.currentHistoryToken

// ... then later, after you get CNContactStoreDidChange notification:
let request = CNChangeHistoryFetchRequest()
request.startingToken = myToken
var error: NSError?
let fetchResult = myContactStore.swiftEnumerator(for: fetchRequest, error: &error)
myToken = myContactStore.currentHistoryToken // for next time

for event in fetchResult.value {
(event as! CNChangeHistoryEvent).accept(myCNChangeHistoryEventVisitor)
// or alternatively:
let newContact = (event as? CNChangeHistoryAddContactEvent).contact
}

关于ios - 如何使用 CNContactStoreDidChangeNotification 获取新添加的联系人标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42670798/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com