2012-07-07 4 views
1

주소록에서 전화 번호를 받고 있습니다. 에 "é와"Teléfono "ABMultiValueCopyLabelAtIndex의 잘못된 CFStringRef

ABMultiValueRef arrTelefonos = ABRecordCopyValue(contacto,kABPersonPhoneProperty); 
for(int i=0;i<ABMultiValueGetCount(arrTelefonos);i++) { 
    CFStringRef labelTelefono = ABMultiValueCopyLabelAtIndex(arrTelefonos,i); 
    CFStringRef numeroTelefono = ABMultiValueCopyValueAtIndex(arrTelefonos,i); 
    CFStringRef labelTelefonoLoc = ABAddressBookCopyLocalizedLabel(labelTelefono); 
    /* Do some stuff */ 
} 

모든 것이 한 경우를 제외하고 좋아입니다 : 내 경우에는 특수 문자로 표시된 전화 연락처는 (있는 경우 레이블은 내가 이런 식으로하고 있어요

CFStringRef labelTelefono = ABMultiValueCopyLabelAtIndex(arrTelefonos,i); 

을 할 때 그래도 문제가 있다면, 누구든지 해결책을 알아? 특수 문자를 허용하지 않습니다 인해 CFStringRef에 문제가 무효 CFStringRef ""내가 받고 있어요? "

은 당신을 감사 예고편

+0

'CFStringRef'는 분명히 특수 문자를 포함 할 수 있습니다. 문자열이 유효하지 않다는 것을 정확히 알려줍니다. 그 끈은 어쩌고? –

+0

응용 프로그램을 debbuging 나는 "labelTelefono"var에 "0x000000 잘못된 CFStringRef"값을 보았다. 이 연락처는 다른 장치에서 가져온 것임을 기억합니다. 이제 레이블을 다시 작성하여 응용 프로그램이 작동하기 때문에 "손상된"레이블이 생성되었지만 생성 된 CFStringRef는 "Tel.fono"입니다. 이 캐릭터를 올바르게 구할 수 있습니까? (너무 빨리 대답 해 주셔서 감사합니다) – rai212

+0

나는 미스터리가 해결되었다고 생각합니다. 1. 이전에 말씀 드렸듯이,이 연락처의 레이블이 동일한 문자로 다시 작성되기 때문에 "손상됨"일 가능성이 있습니다. 괜 찮 2.- 두 번째 미스터리 (필자는 "Tel.fono"라는 레이블을 보았습니다.)는 디버그 콘솔에 표시되어 있었고 특수 문자로 "친숙하지"않았기 때문입니다. 감사합니다. 더 많이 조사하면 솔루션으로 나를 데려 간다.) – rai212

답변

-1
NSMutableArray *phoneNumbers = [[NSMutableArray alloc] init]; 

     ABMultiValueRef multiPhones = ABRecordCopyValue(person, kABPersonPhoneProperty); 
     for(CFIndex i=0;i<ABMultiValueGetCount(multiPhones);i++) { 

      CFStringRef phoneNumberRef = ABMultiValueCopyValueAtIndex(multiPhones, i); 
      NSString *phoneNumber = (__bridge NSString *) phoneNumberRef; 
      [phoneNumbers addObject:phoneNumber]; 

      //NSLog(@"All numbers %@", phoneNumbers); 

     } 
+0

그는 라벨을 원하지만 어떤 이유로 든 문자열의 인코딩이 그에게 좋지 않다는 문제가 있습니다 - 이것은 '관련'이지만 대답이 없습니다 (주석에서 읽을 수있는대로 해결했습니다) –