如何在 IOS 中的联系人更改事件中获得通知? [复制]

Posted

技术标签:

【中文标题】如何在 IOS 中的联系人更改事件中获得通知? [复制]【英文标题】:How to get notified in contact changed event in IOS? [duplicate] 【发布时间】:2015-03-23 11:02:27 【问题描述】:

我想在 iPhone 的联系人有插入/更新事件时得到通知。

是否可以在我的应用程序发生特定联系人更改事件时收到通知?

只是一个新手......对于 ios Swift。

我并不期待完整的源代码。只是想知道它是否可能并提示。

提前致谢。

【问题讨论】:

KVO 和 NSNotification 都是你的解决方案。查看这些nshipster.com/nsnotification-and-nsnotificationcenter 和appcoda.com/understanding-key-value-observing-coding @iphonic 谢谢你的想法 【参考方案1】:

从 iOS 9 你可以注册你的类来观察CNContactStoreDidChangeNotification

NSNotificationCenter.defaultCenter().addObserver(
    self,
    selector: #selector(addressBookDidChange),
    name: NSNotification.Name.CNContactStoreDidChange,
    object: nil)

然后:

@objc func addressBookDidChange(notification: NSNotification)     
    //Handle event here...

如Contacts Framework Reference所报告的

成功执行保存后,联系人存储发布一个 CNContactStoreDidChangeNotification 通知默认为 通知中心。如果您缓存任何联系人框架对象,您 需要通过它们的标识符或使用重新获取这些对象 用于最初获取它们的谓词,然后 释放缓存的对象。请注意,缓存的对象是陈旧的,但是 不是无效的。

编辑:

请注意,地址簿和地址簿 UI 框架现已弃用。

【讨论】:

即使通讯录中没有任何更改,我也会收到通知。如果我只是打开系统联系人并切换到我的应用程序,我会收到通知,而且不是一个,而是两个或三个 会通知吗?如果我们终止应用程序并更改地址簿中的某些内容,请再次打开应用程序 在应用被杀死并更改联系人然后打开应用时没有通知。 即使应用程序被终止并且联系人随着 Whatsapp 所做的更改而改变,是否有人找到了解决方案?【参考方案2】:

在 iOS 中可以使用 -

注册外部变更回调通知器-

ABAddressBookRef ntificationaddressbook = ABAddressBookCreate();
    ABAddressBookRegisterExternalChangeCallback(ntificationaddressbook, MyAddressBookExternalChangeCallback, self);

实现回调 -

void MyAddressBookExternalChangeCallback (ABAddressBookRef ntificationaddressbook,CFDictionaryRef info,void *context)

    // called when there is any change in AddressBook

更多细节可以参考这个链接-

Detect what was changed from ABAddressBookRegisterExternalChangeCallback

【讨论】:

很好回答@SanjayMohnani !!!我正在尝试将其转换为 swift 2.0 但无法正确执行。您能否从 swift 2.0 发布相同的内容【参考方案3】:

您可以实现KeyValue Observers observevalueforkeypath 以获取所选元素状态更改的通知

【讨论】:

以上是关于如何在 IOS 中的联系人更改事件中获得通知? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何更改通知iOS中的图标?

本机联系人更改通知

如何在iOS上获得音量级别和音量更改通知?

如何获得有关SharePoint组更改的通知。

iOS - CNContactStoreDidChangeNotification 通知细节差异

在 iOS 中如何在后台运行状态下获取全局触摸事件通知?