문제

내 질문은 iPhone의 연락처 목록의 사람 항목에있는 기본 전화 번호 레이블 중 일부를 둘러싼 마크 업에 관한 것입니다.

다음 전화 번호 항목이있는 "John Smith"를위한 iPhone 연락처 목록 주소록 항목을 만들었습니다.

  • 모바일 (604) 123-4567
  • iPhone (778) 123-4567
  • 홈 (604) 789-4561
  • 작업 (604) 456-7891
  • 메인 (604) 789-1234
  • 메가폰 (234) 567-8990

처음 5 개의 레이블은 연락처 애플리케이션에서 제공하는 기본 레이블이며 마지막 레이블 인 "Megaphone"은 사용자 정의 레이블입니다.

주소록에서 각 사람의 레이블과 전화 번호를 검색하고 표시하는 다음 방법을 작성했습니다.

-(void)displayPhoneNumbersForAddressBook {
    ABAddressBookRef book = ABAddressBookCreate();
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(book);
    ABRecordRef record = CFArrayGetValueAtIndex(people, 0);
    ABMultiValueRef multi = ABRecordCopyValue(record, kABPersonPhoneProperty); 
    NSLog(@"---------" );
    NSLog(@"displayPhoneNumbersForAddressBook" );

    CFStringRef label, phone;
    for (CFIndex i = 0; i < ABMultiValueGetCount(multi); ++i) {
            label = ABMultiValueCopyLabelAtIndex(multi, i);
            phone = ABMultiValueCopyValueAtIndex(multi, i);
            NSLog(@"label: \"%@\"     number: \"%@\"", (NSString*)label, (NSString*)phone);
            CFRelease(label);
            CFRelease(phone);
    }
    NSLog(@"---------" ); 
    CFRelease(multi);
    CFRelease(people);
    CFRelease(book);
}

그리고 다음은 내가 입력 한 주소록 항목의 출력입니다.

2010-03-08 13:24:28.789 test2m[2479:207] ---------
2010-03-08 13:24:28.789 test2m[2479:207] displayPhoneNumbersForAddressBook
2010-03-08 13:24:28.790 test2m[2479:207] label: "_$!<Mobile>!$_"     number: "(604) 123-4567"
2010-03-08 13:24:28.790 test2m[2479:207] label: "iPhone"     number: "(778) 123-4567"
2010-03-08 13:24:28.791 test2m[2479:207] label: "_$!<Home>!$_"     number: "(604) 789-4561"
2010-03-08 13:24:28.791 test2m[2479:207] label: "_$!<Work>!$_"     number: "(604) 456-7891"
2010-03-08 13:24:28.792 test2m[2479:207] label: "_$!<Main>!$_"     number: "(604) 789-1234"
2010-03-08 13:24:28.792 test2m[2479:207] label: "megaphone"     number: "(234) 567-8990"
2010-03-08 13:24:28.793 test2m[2479:207] ---------

마크 업 캐릭터는 무엇입니까?

_$!< and >!$_

대부분의 주변, iPhone 용으로 기본 레이블을 저장합니까?

"iPhone OS의 주소록 프로그래밍 안내서"에서 정보를 찾을 수있는 위치를 알려주시겠습니까?

도와 주셔서 감사합니다.

도움이 되었습니까?

해결책

나는 같은 문제에 빠지고 있습니다. 이것이 내가 지금까지 생각하는 것입니다.

당신의 보는 마크 업은 시스템에 사용자 정의 레이블이 아니라 기본 레이블임을 나타냅니다. 이 코드를 실행하는 경우 :
NSLog(kABOtherLabel);

이 결과는 다음과 같습니다.
_$!<Other>!$_

이것이 바로 저장된 가치입니다 kABOtherLabel 상수 (유형 CFStringRef). 나는 그 이유를 생각합니다 iPhone 그 주위에 마크 업은 '커스텀'레이블이지만 사용자 대신 Apple에서 시작된 것입니다.

당신은 당신의 megaphone 위의 레이블. 그러나 사용하지 않고 '기타'라벨이있는 전화 번호 (또는 전자 메일 주소)를 만들려고하는 경우 kABOtherLabel 일정하거나 가치입니다 _$!<Other>!$_, 시스템은 사용자 정의 레이블을 생성한다고 생각합니다. 이 예에서와 같이 :

ABMultiValueAddValueAndLabel(email, @"nospam@notarealdomain.com", @"other", NULL);

그리고 iPhone의 주소록 항목을 가서 편집하면 별도의 사용자 정의 레이블 목록에 표시됩니다. (따라서 '기타'에 대한 2 개의 선택, 기본값과 하나는 사용자 정의 레이블에 있습니다).

이것이 당신의 질문에 대답하지는 않았지만 도움이되기를 바랍니다.

다른 팁

이것은 새로운 것과 거의 동일합니다 CNContact Framework 연락처를 처리하는 권장 방법으로 abaddressbook을 대체했습니다.

Apple이 제공하는 6 개의 기본 레이블이 있으며 전화 별 CNLABELLEDVALUE 상수:

CNLabelPhoneNumberiPhone = "iPhone"
CNLabelPhoneNumberMobile = "_$!<Mobile>!$_"
CNLabelPhoneNumberMain = "_$!<Main>!$_"
CNLabelPhoneNumberHomeFax = "_$!<HomeFAX>!$_"
CNLabelPhoneNumberOtherFax = "_$!<OtherFAX>!$_"
CNLabelPhoneNumberPager = "_$!<Pager>!$_"

포함 _$!< 그리고 >!$_ 이 상수 중 5 개는 방법의 가용성을 고려할 때 문자열이 운영 체제에 의해 현지화 될 수있는 마커 일 가능성이 높습니다. 국소화 (forlabel) :). 이 지시자가 iPhone 주위에 나타나지 않는 이유는 Apple이 iPhone을 현지화하지 않기 때문에 모든 언어로 "iPhone"으로 표시되기 때문입니다.

현명한 동작은 문자열을 표시 할 때이를 숨기는 것입니다. localizedString(forLabel:), 항목을 편집 할 경우이 구분자를 문자열에 계속 저장하고 사용자가 만든 레이블을 사용자 정의 레이블이 이들, 즉 모바일, 메인, 호출기 등의 본체와 동일한 문자열에 매핑하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top