- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想要获取所有新添加的联系人标识符。
这是我的代码:
-(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/
如何获取iPhone通讯录的最新变化 我即将在我的 iOS 应用程序中集成联系人框架,并希望在外部(由其他应用程序或用户)更改联系人(在联系人中添加/编辑字段)时收到通知。我找到了 CNContact
当应用程序处于后台状态时更改联系人数据库时,我能够观察到 CNContactStoreDidChangeNotification。我很确定只有一个观察者被添加到 NSNotificationCente
当应用程序处于后台状态时更改联系人数据库时,我能够观察到 CNContactStoreDidChangeNotification。我很确定只有一个观察者被添加到 NSNotificationCente
我想要获取所有新添加的联系人标识符。 这是我的代码: -(void)viewWillAppear:(BOOL)animated { [[NSNotificationCenter default
我使用通讯录联系人制作了应用。 问题:-我从通讯录更新/添加/删除联系人,然后返回到我的应用程序。 我的应用程序 applicationDidBecomeActive 主动编写以下代码:- Notif
我是一名优秀的程序员,十分优秀!