2015-01-12 87 views
0

我想用「 - 」「」「來代替號碼。」同時從電話簿中獲取聯繫人,這裏是我的代碼。
我的主要動機是從數字中提取國家代碼if + is present。
如果還有其他方式可以訪問國家代碼,請給我建議。未收到「 - 」「。」 「」同時從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

Rob我沒有空間可以刪除。我在模擬器和iPhone 5設備(iOS 8)中獲取空間,但沒有在iPhone 4s(ios7)中獲得空間。 –

相關問題