我希望通过我的应用程序使用数字作为键在
iphone地址簿中搜索,然后检索与该联系人关联的图像并将其显示在UI
ImageView上.
我尝试使用ABAddressBook框架,但无法继续.
任何人都可以建议我解决方案或我可以遵循的任何替代路径.任何代码片段也会有很大的帮助!!
任何形式的帮助都会非常值得注意.
提前致谢
解决方法
AB框架有时可能是一种真正的痛苦.但它分解为一系列非常简单的操作.首先,您必须创建一个ABAddressBook实例:
ABAddressBookRef addressbook = ABAddressBookCreate();
然后,您需要复制地址簿中所有人的数组,并逐步查找所需数据:
CFArrayRef allPeople = ABAddressBookcopyArrayOfAllPeople(addressbook); CFIndex numPeople = ABAddressBookGetPersonCount(addressbook); for (int i=0; i < numPeople; i++) {
在你的循环中,你可能想要获得对个人的引用:
ABRecordRef person = CFArrayGetValueAtIndex(allPeople,i);
然后,您想要将您拥有的号码(让我们称之为inNumber)与与该特定人员相关联的每个电话号码进行比较.要做到这一点,您首先需要一个所有人的电话号码列表:
ABMutableMultiValueRef phonelist = ABRecordcopyValue(person,kABPersonPhoneProperty);
然后,当然,你需要有一个内循环来循环每个人的电话号码:
CFIndex numPhones = ABMultiValueGetCount(phones); for (int j=0; j < numPhones; j++) {
由于电话号码具有与之关联的数字和标签,因此您需要将实际电话号码字符串解压缩为Nsstring:
CFTypeRef ABphone = ABMultiValuecopyValueAtIndex(phoneList,j); Nsstring *personPhone = (Nsstring *)ABphone; CFRelease(ABphone);
现在你终于可以比较数字了!使用标准的Nsstring比较方法,但请记住,您需要担心格式化等.
一旦找到电话号码与inNumber匹配的人,您就会希望将该人的图像提取到UIImage中:
CFDataRef imageData = ABPersoncopyImageData(person); UIImage *image = [UIImage imageWithData:(NSData *)imageData]; CFRelease(imageData);
当退出时,你需要清理内存. AB框架的一般经验法则是,您不需要释放函数名称中包含Get的任何内容,以及任何需要发布的复制或创建的内容.因此,在这种情况下,您需要CFRelease()phonelist,allPeople和addressbook,但不需要numPeople,person或numPhones.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。