2010-07-06 101 views
-1

问题是,我总是在调用phones变量的任何方法上运行时崩溃。 在此版本中,我在1ABMultiValueCopyValueAtIndex)处得到一个错误。 如果我会对此行发表评论,代码会在2ABMultiValueGetCount)上崩溃。 它看起来像属性是空的。如果我NSLogphones变量。我得到(null)。 我测试iPhone模拟器上的代码,我有一些虚拟联系人有一些电话号码。 另外firstNamelastName工作就像一个魅力。如何处理iPhone的地址簿上的多个属性?

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

}

+1

那么你的问题如何处理null? – slf 2010-07-06 14:10:16

+0

我的问题是,如何从地址簿中获取数字。数字在那里,但我不知何故得到空。 – Alistra 2010-07-06 21:30:49

回答

0

代码:

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

释放的地址簿和被下文称从它发行过的所有对象。所以指向MultiValueRefs的指针在使用之前解除分配。

-4

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

+0

我知道它泄漏。我首先想让它起作用,然后保留所有变量。 – Alistra 2010-07-06 21:31:43

+0

如果您不知道AddressBook的任何信息,请不要回答问题,tc。谢谢! – 2010-07-06 21:39:08

0

我想你如何采购ABMultiValueRef的假设是错误的。我没有在这台计算机上使用我的AB代码,但验证ABRecordCopyValue是合适的方法。然后研究ABMultiValueRef如何访问其内容。这是一个完全不同的对象集而不是简单的字符串。

+0

正如您在评论部分中看到的那样。我试着用id类型,但也没有工作。我认为这个例子几乎是从苹果文档复制粘贴的,即如何使用multiRef部分。我会在工作中检查明天。 – Alistra 2010-07-06 21:47:21

相关问题