2013-09-16 3 views
1

연락처 표시 표로 ABPeoplePickerNavigationController을 사용하고 있습니다. 연락처를 탭하여 새로운 이미지를 설정해야합니다. 사람 데이터 변경을 위임하기위한 코드를 추가했지만 이미지를 변경할 수는 없습니다. 어떤 제안?연락처 이미지 설정 iOS

이 아래에있는 내 코드입니다 :

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person 
{ 
    NSData *dataRef = UIImagePNGRepresentation(self.theImage); 
    CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]); 
    CFErrorRef error; 

    ABPersonRemoveImageData(person, &error); // clean any image first from ref 
    if (ABAddressBookSave(_addressBook, &error)) 
    { 
     ABPersonSetImageData(person, cfdata, &error); 
     ABAddressBookSave(_addressBook, &error); 
    } 
    CFRelease(cfdata); 

    [self dismissViewControllerAnimated:YES completion:nil]; 

    return NO; 
} 

내가 여기에서 샘플을 다운로드 : 당신이 내 코드를 아래 대리자를 코드를 다운로드하고 수정할 수 있습니다 작동하는 방법 link

확인합니다.

답변

1

당신은 당신이 ABPersonSetImageData를 사용할 때 미리보기 및 전체 크기의 이미지를 모두 추가됩니다, 연락처가 이미 이미지가없는 경우, 또한 ABAddressBookSave()

를 통해 변경 사항을 저장 명심해야합니다. 그러나 연락처에 이미 전체 크기 이미지가있는 경우 ABPersonSetImageData을 사용하면 미리보기 이미지가 설정됩니다.

// this is not production level code. method call return values and errors 
// need to be handled properly 
ABPersonRemoveImageData(person, &error); // clean any image first from ref 
if (ABAddressBookSave(addressBook, &error)) 
{ 
    ABPersonSetImageData(person, cfdata, &error); 
    ABAddressBookSave(addressBook, &error) 
} 
+0

의견을 보내 주셔서 감사합니다. 귀하의 의견에 따라 코드로 내 질문을 업데이트했지만 여전히 내 연락처에 해당 이미지가 표시되지 않습니다. 나는 cfdata, person, _addressBook 모두 값이 있음을 확인했다. –

+0

내가 다운로드 한 곳의 소스에 대한 링크를 추가했다. –

+1

다른 주소록 참조를 사용했다고 생각한다. ABPeoplePickerNavigationController에서 주소록의 인스턴스를 가져오고 올바르게 작동합니다. 감사 –