我想要获取所有新添加的联系人标识符。
这是我的代码:
-(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:错误:
要从 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
:
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
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)