-1

问题是我总是在phones变量调用的任何方法上遇到运行时崩溃。1在此版本中,我在( ABMultiValueCopyValueAtIndex)处收到错误消息。如果我要评论这一行,代码会在2( ABMultiValueGetCount) 处崩溃。看来物业是空的。如果我NSLogphones变量。我明白了(null)。我在 iPhone 模拟器上测试代码,那里有一些虚拟联系人和一些电话号码。并且像魅力一样工作firstNamelastName

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];

}

4

3 回答 3

0

我认为您关于如何获得 ABMultiValueRef 的假设是错误的。我在这台计算机上没有我的 AB 代码,但请确认 ABRecordCopyValue 是合适的方法。然后研究 ABMultiValueRef 如何访问其内容。这是一个与简单字符串完全不同的对象集。

于 2010-07-06T21:37:36.383 回答
0

编码:

addressBook = ABAddressBookCreate();
people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
CFRelease(addressBook);

释放地址簿,并且从它引用的所有对象也被释放。因此,指向 MultiValueRefs 的指针在使用前被释放。

于 2010-07-07T10:23:51.673 回答
-4

学习使用调试器。此外,您的代码泄漏。

于 2010-07-06T15:22:43.463 回答