问题是我总是在phones
变量调用的任何方法上遇到运行时崩溃。
在此版本中,我在1
(ABMultiValueCopyValueAtIndex
)收到错误消息。
如果我对此行发表评论,代码会在2
(ABMultiValueGetCount
)崩溃。
看起来房产是空的。如果我NSLog
phones
变量。我得到(null)
。
我在iPhone模拟器上测试代码,我有一些虚拟联系人,有一些电话号码。
firstName
和lastName
也像魅力一样。
for(id person in people){
NSString *firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
NSString *lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSString *phone = (NSString*)ABMultiValueCopyValueAtIndex(phones, 0); /*1*/
/*2/ id ph, phLb;
for (CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) {
phLb = ABMultiValueCopyLabelAtIndex(phones, i);
ph = ABMultiValueCopyValueAtIndex(phones, i);
NSLog(@"%@,%@", phLb, ph);
CFRelease(phLb);
CFRelease(ph);
}
*/
NSLog(@"%@", firstName);
NSLog(@"%@", lastName);
NSLog(@"%@", phones);
NSLog(@"%@", phone);
[firstName release];
[lastName release];
[phone release];
[phones release];
}
答案 0 :(得分:0)
我认为你对如何获得ABMultiValueRef的假设是错误的。我没有在这台计算机上使用我的AB代码,但验证ABRecordCopyValue是合适的方法。然后研究ABMultiValueRef如何访问其内容。它是一个完全不同的对象集,而不是简单的字符串。
答案 1 :(得分:0)
代码:
addressBook = ABAddressBookCreate();
people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
CFRelease(addressBook);
解除分配地址簿,并且所有被引用的对象也被释放。因此,在使用之前,指向MultiValueRefs的指针已被释放。
答案 2 :(得分:-4)
学习使用调试器。此外,您的代码泄露。