如何使用 ABAddressBook 删除 iPhone 通讯录中的记录?
Posted
技术标签:
【中文标题】如何使用 ABAddressBook 删除 iPhone 通讯录中的记录?【英文标题】:How to delete record in iPhone address book using ABAddressBook? 【发布时间】:2010-11-21 10:09:43 【问题描述】:我正在学习通讯录框架,然后我想从 iPhone 通讯录中删除记录。我查看了文档,发现了一个名为 ABAddressBookRemoveRecord
的函数,但我找不到删除记录的方法,比如用户将选择一条记录然后点击删除按钮,然后该记录将被删除。
到目前为止,我所做的只是将我的头撞到文档上,仅此而已。
能否给我一个链接或示例如何删除通讯录中的记录?
谢谢!
【问题讨论】:
【参考方案1】:查看 ABPersonViewController+Delete 类别,它可以在不使用任何私有方法的情况下启用联系人删除:
https://github.com/shrtlist/ABDelete
【讨论】:
【参考方案2】:当您删除ABAddressBookRemoveRecord
的记录时,您应该将最终结果保存为ABAddressBookSave
。如果你想要一个 UIInterface 来删除记录,我认为你需要自己实现。苹果提供的联系人UI在ABAddressBookUI framework
里面。
【讨论】:
你说我已经完成了第一部分,所以你的意思是说我应该看看 ABAddressBookUI.h 文件 你可以看看ABAddressBookUI.framework,它是另一个框架。但是,我记得你想要的东西需要手动实现。如果您想删除 ABRecordRef 的属性,ABAddressBookUI 将成为您的朋友。【参考方案3】:目标 C 代码:
ABAddressBookRef addressBook;
CFErrorRef error = NULL;
addressBook = ABAddressBookCreate();
ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook,<YOUR 'PERSON' GOES HERE>);
ABAddressBookRemoveRecord(addressBook, (ABRecordRef)person, &error );
if(error !=NULL)
// Handle success
ABAddressBookSave(addressBook, NULL);
Swift 代码:
var emptyDictionary: CFDictionaryRef?
var addressBookRef: ABAddressBookRef?
var err: Unmanaged<CFErrorRef>? = nil
var userRecord: ABRecordRef?
addressBookRef = ABAddressBookCreateWithOptions(emptyDictionary, &err)?.takeRetainedValue()
userRecord = ABAddressBookGetPersonWithRecordID(addressBookRef, "Record ID of User").takeUnretainedValue()
ABAddressBookRemoveRecord(addressBookRef, userRecord, &err)
if err != nil
// Handle success
// Save Address Book changes
if ABAddressBookHasUnsavedChanges(addressBookRef)
var err: Unmanaged<CFErrorRef>? = nil
let savedToAddressBook = ABAddressBookSave(addressBookRef, &err)
if savedToAddressBook
print("Successully saved changes.")
else
print("Couldn't save changes.")
else
print("No changes occurred.")
【讨论】:
以上是关于如何使用 ABAddressBook 删除 iPhone 通讯录中的记录?的主要内容,如果未能解决你的问题,请参考以下文章
ABAddressBook 没有名为“removeRecord”的成员