Как получить номер телефона из адресной книги в виде строки? - PullRequest
3 голосов
/ 11 апреля 2011

У меня есть текстовое поле с именем контакта, и я хочу получить номер телефона для этого:

ABAddressBookRef adressBook = ABAddressBookCreate();

NSArray *people = (NSArray *)ABAddressBookCopyPeopleWithName(adressBook,
                               CFStringCreateCopy(kCFAllocatorDefault, 
                                                 (CFStringRef)recipient));

if((people != nil) && ([people count] == 1)){
    ABMultiValueRef person = (ABMultiValueRef)[people objectAtIndex:0];
    NSString *phone = (NSString *)ABRecordCopyValue(person, 
                                                      kABPersonPhoneProperty) ;
    NSLog(@"%@", phone);
}

Я хочу номер телефона в виде строки, но это дает мне гораздо больше:

ABMultiValueRef 0x339470 with 1 value(s)
    0: _$!<Mobile>!$_ (0x338c50) - 0177 1647788 (0x339450)

Как получить только число в виде строки?

Ответы [ 4 ]

11 голосов
/ 13 апреля 2011
NSMutableArray *phoneNumbers = [[[NSMutableArray alloc] init] autorelease];
ABMultiValueRef multiPhones = ABRecordCopyValue(person,kABPersonPhoneProperty);
for(CFIndex i=0;i<ABMultiValueGetCount(multiPhones);++i) {
    CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i);
    NSString *phoneNumber = (NSString *) phoneNumberRef;

    [phoneNumbers addObject:phoneNumber];
}
2 голосов
/ 13 апреля 2011

kABPersonPhoneProperty - это свойство с несколькими значениями, но вы рассматриваете его как строку. Вы должны получить индивидуальные номера и распечатать их отдельно.

1 голос
/ 15 апреля 2012

Для тех, кто ищет извлечение телефона.Вы можете извлечь телефонные номера из текста, а затем заменить его на @ "", например:

NSString *userBody = @"This is a text with 30612312232 my phone";
if (userBody != nil) {
    NSError *error = NULL;
    NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypePhoneNumber error:&error];
    NSArray *matches = [detector matchesInString:userBody options:0 range:NSMakeRange(0, [userBody length])];
    if (matches != nil) {
        for (NSTextCheckingResult *match in matches) {
            if ([match resultType] == NSTextCheckingTypePhoneNumber) {
                DbgLog(@"Found phone number %@", [match phoneNumber]);
            }
        }
    }
}

`

1 голос
/ 11 апреля 2011
CFStringRef phoneRef = ABRecordCopyValue(person, kABPersonPhoneProperty) ;
NSString *phoneNumber = (NSString *) phoneRef;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...