如何在 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 中的联系人更改事件中获得通知? [复制]的主要内容,如果未能解决你的问题,请参考以下文章