gpt4 book ai didi

objective-c - 无法读取 kABPersonPhoneProperty

转载 作者:可可西里 更新时间:2023-11-01 06:18:35 25 4
gpt4 key购买 nike

我遇到了一个(奇怪的)问题:我想检索联系人的电话号码,但由于某种原因,我无法做到。

我用过

ABAddressBookRef addressBook = ABAddressBookCreate();
NSArray *contacts = (NSArray*) ABAddressBookCopyArrayOfAllPeople(addressBook);
CFRelease(addressBook);

获取所有联系人的数组。那我想用

ABMultiValueRef ref = ABRecordCopyValue([contacts objectAtIndex:i], kABPersonPhoneProperty);

NSLog(@"%d",ref==NULL);

但是 ABRecordCopyValue 总是返回 nil...
请注意,我能够检索有关联系人的其他信息:例如,使用

可以很好地提取姓名
CFStringRef name = ABRecordCopyCompositeName([contacts objectAtIndex:i]);


有人可以向我解释我做错了什么吗?我将 Snow Leopard 与 Xcode 4.2 一起使用,我正在为 iOS 4.0 开发...

编辑:我找到了一个解决方案:而不是使用

ABRecordCopyValue([contacts objectAtIndex:i], kABPersonPhoneProperty);

我用过

ABRecordID idRec = ABRecordGetRecordID([contacts objectAtIndex:i]);
ABMultiValueRef ref = ABRecordCopyValue(ABAddressBookGetPersonWithRecordID(addressBook, idRec), kABPersonPhoneProperty);

但是我必须保持对 addressBook 的引用有效(不要发布它),因此 EricS 建议的解决方案似乎更好。

最佳答案

这只是一个猜测,但我会尽量让地址簿保持打开状态,直到您读完为止。也就是说,在读取所有电话号码之前不要调用 CFRelease(addressBook);

地址簿更像是一个数据库而不是一个平面文件,读取联系人记录可以让您引用其他字段和数据,而不是所有实际字段内容。

关于objective-c - 无法读取 kABPersonPhoneProperty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8630738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com