2010-03-25 81 views
0

我在线发现了一个教程,扩展了Apple QuickStart应用程序(基本地址簿应用程序)和另一个返回第一个电话号码(不管单击了哪个电话号码)的教程。我只想在标签中显示选定的电话号码。标签被称为电话号码:从iPhone地址簿返回所选电话地址

- (BOOL)peoplePickerNavigationController: 

(ABPeoplePickerNavigationController *)peoplePicker 

    shouldContinueAfterSelectingPerson:(ABRecordRef)person 

          property:(ABPropertyID)property 

          identifier:(ABMultiValueIdentifier)identifier{ 


ABMutableMultiValueRef phoneMulti = ABRecordCopyValue(person, kABPersonPhoneProperty); 
NSMutableArray *phones = [[NSMutableArray alloc] init]; 
int i; 
for (i = 0; i < ABMultiValueGetCount(phoneMulti); i++) { 
NSString *aPhone = [(NSString*)ABMultiValueCopyValueAtIndex(phoneMulti, i)autorelease]; 

    [phones addObject:aPhone]; 
} 

NSString *mobileNo = [phones objectAtIndex:0]; 
self.phoneNumber.text = phones; 

[self dismissModalViewControllerAnimated:YES]; 

return NO; 

} 

如何确保标签是一个由用户选择,而不仅仅是第一个数组条目(或任何其他阵列i项代码)

感谢

回答

2

我不知道我理解你的问题,但如果你想获得的电话号码和/或标签用户实际选择,您可以使用此:

- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier { 
     // ensure user picked a phone property 
     if (property == kABPersonPhoneProperty) { 
      ABMultiValueRef phone = ABRecordCopyValue(person, property); 
      CFStringRef selectedNumber = ABMultiValueCopyLabelAtIndex(phone, identifier); 
      CFStringRef selectedLabel = ABMultiValueCopyValueAtIndex(phone, identifier); 
      // insert code to do something with the values above 
      [self dismissModalViewControllerAnimated:YES]; 
      return NO; } // end if 
     else { 
      // display an alert or something - handle the error 
} } // end else, end method 

我不是t遵循你的代码片断 - 不确定你使用的数组是什么,如果你想要的只是用户选择的选择。

+0

谢谢,那是做的。 – Ali 2010-03-27 12:58:03

+0

我试过这个答案,我可以选择标记为“移动”,“工作”和“家庭”的电话号码。但是当选择“iPhone”时,我的应用程序崩溃。这[后](http://stackoverflow.com/a/12006985/1479411)解决了这个问题。希望这可以帮助那些和我有同样问题的人。 – Rick 2012-08-29 16:55:32