iOS - CNContactStoreDidChangeNotification 通知细节差异

Posted

技术标签:

【中文标题】iOS - CNContactStoreDidChangeNotification 通知细节差异【英文标题】:iOS - CNContactStoreDidChangeNotification notification details discreapencies 【发布时间】:2018-11-28 00:13:17 【问题描述】:

如何获取 iPhone 通讯录的最新变化

我即将在我的 ios 应用程序中集成联系人框架,并希望在外部(由其他应用程序或用户)更改联系人(在联系人中添加/编辑字段)时收到通知。我找到了 CNContactStoreDidChangeNotification,想知道它是否会以有意义的形式带来联系人卡片中的确切更改和/或更改联系人的信息。

这里找不到

【问题讨论】:

【参考方案1】:

目前,CNContactStoreDidChangeNotification 没有给出更改。因此,如果您有一些缓存的联系人,则必须在通知到来时重新获取它们。

-(void)registerForCNContactStoreDidChangeNotification 
   if (!self.hasRegisteredForNotifications) 
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(storeDidChange:) name:CNContactStoreDidChangeNotification  object:nil];
        self.hasRegisteredForNotifications = YES;
   


- (void)deviceContactsDidChange:(NSNotification *)notification 
// notification.userInfo can be nil

// need to fetch all contacts with enumerateContactsWithFetchRequest to get all contacts or
// refresh the cached contacts with unifiedContactsMatchingPredicate

Apple says

如果您缓存了获取的联系人、群组或容器,则需要在发布 CNContactStoreDidChangeNotification 时重新获取这些对象(并释放旧的缓存对象)。

【讨论】:

谢谢@coconata。除了重新同步所有联系人之外,您是否知道任何解决方法? unifiedContactsMatchingPredicate 允许获取唯一必要的联系人

以上是关于iOS - CNContactStoreDidChangeNotification 通知细节差异的主要内容,如果未能解决你的问题,请参考以下文章

IO复用阻塞IO非阻塞IO同步IO异步IO

四种IO模型‘阻塞IO/非阻塞IO/信号驱动IO/异步IO‘

5种IO模型阻塞IO和非阻塞IO同步IO和异步IO

网络IO模型:同步IO和异步IO,阻塞IO和非阻塞IO

同步IO异步IO阻塞IO非阻塞IO之间的联系与区别

同步IO异步IO阻塞IO非阻塞IO之间的联系与区别