2015-01-12 3 views
0

Я хочу получить номер, как есть, с "-" "" "". при сборе контакта с телефонной книгой вот мой код.
Моим главным мотивом является извлечение кода страны из числа, если + присутствует.
Также, пожалуйста, предложите мне, если есть какой-либо другой способ доступа к коду страны.Не получать "-" "." «" при получении контакта из телефонной книги от ABPerson

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController              *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier; 
    { 
     if (property == kABPersonPhoneProperty) { 
      ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty); 
    for(CFIndex i = 0; i < ABMultiValueGetCount(multiPhones); i++) { 
     if(identifier == ABMultiValueGetIdentifierAtIndex (multiPhones, i)) { 
      CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i); 
      CFRelease(multiPhones); 
      NSString *phoneNumber = (__bridge NSString *) phoneNumberRef; 
      CFRelease(phoneNumberRef); 
      if ([phoneNumber rangeOfString:@"+"].location == NSNotFound) { 
       phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"(" withString:@""]; 
       phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@")" withString:@""]; 
       phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@" " withString:@""]; 
       phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
       phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"." withString:@""]; 

       self.lblMobileNumber.text = [NSString stringWithFormat:@"%@", phoneNumber]; 
      } else { 
       NSArray *PhoneNumberComponents = [phoneNumber componentsSeparatedByString:@" "]; 
       NSString * strCountryCode = PhoneNumberComponents[0] ; 
       [self.btnCountryCode setTitle:strCountryCode forState:UIControlStateNormal]; 

       phoneNumber= [phoneNumber stringByReplacingOccurrencesOfString:PhoneNumberComponents[0] withString:@""]; 
       NSLog(@"countryCodeSepratedStr%@",phoneNumber); 
       phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"(" withString:@""]; 
       phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@")" withString:@""]; 
       phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@" " withString:@""]; 
       phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"-" withString:@""]; 
       phoneNumber = [phoneNumber stringByReplacingOccurrencesOfString:@"." withString:@""]; 
       self.lblMobileNumber.text = [NSString stringWithFormat:@"%@", phoneNumber]; 

      } 

     } 
    } 
    } 
    return NO; 
} 
+0

Несвязанный, вы можете запустить этот код через статический анализатор («Анализировать» в меню «Продукт» Xcode), так как я опасаюсь высвободить номер телефона перед его использованием. Честно говоря, гораздо проще использовать '__bridge_transfer' с номером телефона, и вы можете просто полностью исключить« CFRelease (phoneNumberRef) », и пусть ARC позаботится об этом (при условии, что вы используете ARC). – Rob

ответ

0

я не был бы склонен делать какой-либо из этой манипуляции строки вещи, а просто использовать регулярные выражения для поиска + с последующим номером в начале строки, используя захваченный, чтобы захватить только код страны:

NSError *error; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"^\\s*\\+\\s*(\\d+)[^\\d]*(.*)$" options:0 error:&error]; 

NSTextCheckingResult *result = [regex firstMatchInString:phoneNumber options:0 range:NSMakeRange(0, [phoneNumber length])]; 
if (result) { 
    NSString *countryCode = [phoneNumber substringWithRange:[result rangeAtIndex:1]]; 
    NSString *phoneNumberWithoutCountryCode = [phoneNumber substringWithRange:[result rangeAtIndex:2]]; 
} else { 
    // no country code found 
} 
+0

Роб благодарит за хорошее предложение, но проблема в том, что я не нашел пробела «+» ». "(" ")" в количестве, извлеченном. Например, число, которое я получил, составляет +917863838383 вместо +91 78-22-222222. –

+0

Хм. Я вывел из всего вашего кода, где вы удаляли пробелы и тому подобное, что ваш исходный номер имел знаки препинания, и я предположил, что вы использовали бы это выше, прежде чем снимать все это. Или вы говорите, что некоторые из ваших телефонных номеров начинаются без пробелов и т. П.? В этом случае вам, скорее всего, придется искать код страны в таблице кодов стран. – Rob

+0

У меня нет пробелов для удаления. Я получаю пространство в симуляторе и устройстве iPhone 5 (iOS 8), но не в iPhone 4s (ios7). –