ABPersonSetImageData Only Altering the Contact Thumbnail and Not the Full Pic

前端 未结 1 1581
时光说笑
时光说笑 2020-12-15 13:31

I am trying to add a border around each contact photo. I have working code to create this bordered image and working code to set it as the contact image:

if          


        
相关标签:
1条回答
  • 2020-12-15 13:35

    I am going to answer my own question here as I think I figured out what is the issue. If your contact does NOT already have an image, both the thumbnail and the full sized shot will be added when you use ABPersonSetImageData. If your contact has a full-sized image already, ONLY the thumbnail will be set when you use ABPersonSetImageData.

    After realizing this, the solution is a no-brainer. I just remove the pic right before setting it.

    if (image) {
        NSData *dataRef = UIImagePNGRepresentation(image); 
        CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
        CFErrorRef error;
    
        ABPersonRemoveImageData(person, &error); // <-- clean any image first from ref
        ABAddressBookSave(addressBook, &error);
                    
        ret = ABPersonSetImageData(person, cfdata, &error);
        if (ret) {
            ret = ABAddressBookSave(addressBook, &error);
        } else {
            DebugLog(@"Could not write the image to the person");
        }
        CFRelease(cfdata);
    }
    

    NOTE*

    This creates a square version of the full-sized pic. The process crops the top and bottom off of the image and sets it to be 320x320. But, it is working.

    EDIT 10/9/09

    I have been in communications with Apple and this is indeed a bug in the Address Book framework. If you are reading this post, then I suggest you file a bug with Apple at to help expedite the fix.

    0 讨论(0)
提交回复
热议问题