如何从地址簿联系人处获取电话号码(iphone sdk)

rks*_*rst 2 iphone cocoa-touch objective-c

我正在向用户显示地址簿视图,让他们点击联系人并选择一个电话号码.如果他们选择了电话号码,我想将电话号码作为整数,将联系人的姓名作为NSString.

我尝试使用以下代码:

    //printf("%s\n",[[(NSArray *)ABMultiValueCopyArrayOfAllValues(theProperty) objectAtIndex:identifier] UTF8String]);

    //CFArrayRef *arrayString = [[(NSArray *)ABMultiValueCopyArrayOfAllValues(theProperty) objectAtIndex:identifier] UTF8String];
    NSArray *arrayString = [(NSArray *)ABMultiValueCopyArrayOfAllValues(theProperty) objectAtIndex:identifier];
    printf("%s\n", arrayString);
Run Code Online (Sandbox Code Playgroud)

此代码在此方法中:

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier
Run Code Online (Sandbox Code Playgroud)

我正在检查用户是否使用以下代码选择了一个电话号码:

if (propertyType == kABStringPropertyType)   
{
    [self wrongSelection];

} 
else if (propertyType == kABIntegerPropertyType)     
{
    [self wrongSelection];

} 
else if (propertyType == kABRealPropertyType)    
{
    [self wrongSelection];
} 
else if (propertyType == kABMultiStringPropertyType)     
{
     //This is the phone number...
Run Code Online (Sandbox Code Playgroud)

我能够使用printf在控制台中显示电话号码,但是我无法弄清楚如何将其转换为整数以及如何获取联系人姓名,即使所选属性不是人名.

而且,我正在做的事似乎非常低效.有没有更好的方法来做到这一点?

编辑:如果我不能将它们存储为int,则字符串就可以了.我只是无法弄清楚如何从该数组转到实际的字符串.如果我将其转换或将其保存为UTF8String,我总会得到一些错误.

Jas*_*oco 14

为了有效地获取属性(就读取而言),您可以在回调方法中执行以下操作:

switch( propertyType ) {
  case kABMultiStringPropertyType:
    // this is the phone number, do something
    break;
  default:
    [self wrongSelection];
    break;
}
Run Code Online (Sandbox Code Playgroud)

不过,我不确定你是否真的需要解析它.要从您可以执行的记录中获取电话号码(再次,在您的回调方法中):

ABMultiValueRef phoneNumberProperty = ABRecordCopyValue(person, kABPersonPhoneProperty);
NSArray* phoneNumbers = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty);
CFRelease(phoneNUmberProperty);

// Do whatever you want with the phone numbers
NSLog(@"Phone numbers = %@", phoneNumbers);
[phoneNumbers release];
Run Code Online (Sandbox Code Playgroud)


Lou*_*arg 5

您无法将电话号码转换为整数.电话号码是字符串.Apple包含的默认条目为"1-800-MYAPPLE".

此外,即使电话号码的所有组成部分都是数字,也无法保证世界各地的电话号码实际上足够小,以适应64位值,一旦您考虑到区号,国家代码,内部扩展等等.用户可以自由地在那里放置.