2011-04-12 2 views
1

기본적으로 장치 주소록에 새 레코드를 추가하여 iPhone에 사용자 지정 주소록을 만들려고합니다 (기본적으로 개인 연락처 목록을 장치 AB와 병합 함). 의 항목이 성공적으로 내가 ABAddressBookSave() 후를한다면 내가 확인할 수있는 (주소록에 추가됩니다iPhone의 ABPeoplePickerNavigationController에 대한 사용자 지정 주소록

ABAddressBookRef contacts = ABAddressBookCreate(); 

for (PrivateUserType *user in rosterItems) 
{ 
    CFErrorRef err = NULL; 
    ABRecordRef ref = ABPersonCreate(); 
    ABRecordSetValue(ref, kABPersonLastNameProperty, (CFStringRef)user.lastName, &err); 

    if (err != NULL) 
    { 
    NSString *errorStr = [(NSString *)CFErrorCopyDescription(err) autorelease]; 
    NSLog(@"Can not set name: %@", errorStr); 
    } 

    ... 

    ABAddressBookAddRecord(contacts, ref, &err); 
    if (err != NULL) 
    { 
    NSString *errorStr = [(NSString *)CFErrorCopyDescription(err) autorelease]; 
    NSLog(@"Error adding XMPP roster user to addressbook: %@", errorStr); 
    } 
} 

ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init]; 
picker.addressBook = contacts; 
[viewController presentModalViewController:picker animated:YES]; 
[picker release]; 

: 나는 다음 사용자가 내가 ABPeoplePickerNavigationController.addressbook 속성을 할 수 있다고 생각 연락처를 선택할 수 있도록 할 모든 것을 추가하는 루프). 그러나 항목을 picker으로 표시하지 않습니다 (연락처를 저장하지 않으면 물론 모든 변경 사항을 장치 주소록에 저장합니다).

이 방법이 있습니까? 이것은 iOS 4.3.1입니다.

감사합니다.

답변

2

Toro가 말했듯이 먼저 데이터베이스의 변경 사항을 저장해야합니다. ABPeoplePickerNavigationController는 커밋되지 않은 데이터 또는 사용자 정의 데이터로 작업하지 않습니다.

애플 개발자 포럼에서 다소 신선한 주제를 볼 수 있습니다. https://devforums.apple.com/message/370070#370070 비슷한 질문이있는 곳으로. 애플의 한 남자는 "나는 이것을 할 방법이 없다"고 말한다. 그러나 그는 iOS의 차기 버전에서이 기능을 구현하기위한 버그를 작성하는 것이 좋습니다.

당신이 할 수있는 모든 지금 코드가 땅 :(업데이트

에서이 주소록에 대한 자신의 UI이다. 그는-그는 내가 앱 개발자 포럼에 질문을 발견 너무)))

+0

답변 해 주셔서 감사합니다. 나는 그것이 사실이라고 생각했다. 그러나 다른 것을 바라고 있었다. 아 ~. 감사.. –

0

데이터베이스 변경 내용을 ABAddressBookSave() 메서드로 저장해야합니다.

apple doc link.

+0

네, 그것이 ABAddressBookSave()와 함께 작동한다는 것을 알고 있지만 그것을 사용하지 않기를 바랬습니다. 그래도 도움을 주셔서 감사합니다. –

+0

이러한 연락처를 저장하지 않은 상태로 표시하려면 대신 ABRecordRef를 사용해야합니다. ABRecordRef에서 정보를 열람 할 수 있습니다. 그러나 db에 대한 ABAddressBookSave()까지는 해당 ABRecordRef에 유효한 레코드 ID가 없습니다. 그들은 db에 저장되지 않기 때문입니다. – AechoLiu

관련 문제