iphone - 如何从地址簿编辑 ABPersonSetImageData

标签 iphone ios objective-c abaddressbook

我正在开发一个与 AddressBook 联系人一起使用的 iPhone 应用程序。我正在尝试从地址簿中获取图像并进行编辑,然后保存该图像。

但我不知道如何更新和保存该图像。如果有人知道这一点,请给我一个解决方案。

提前致谢。

这是.h文件

ABAddressBookRef addressBook;
IBOutlet UILabel *lblName;
IBOutlet UIImageView *imgGet;
UIImage *imgContact;
NSString* name;

.m 文件

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
    name = [(NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty) autorelease];
    lblName.text = name;
    if(ABPersonHasImageData(person)) {
        CFDataRef imageData = ABPersonCopyImageData(person);
        imgContact = [UIImage imageWithData:(NSData *)imageData];
        imgGet.image = imgContact;
        CFRelease(imageData);
    } else {
        imgGet.image = [UIImage imageNamed:@"ABPicturePerson@2x.png"];
    }

    [self.navigationController dismissViewControllerAnimated:(YES) completion:nil];

return NO;
}

从上面的方法获取图像和名称后,我打开图库并选择图像,然后单击下面的方法按钮,但图像未保存或更新在地址簿中

-(IBAction)btnSaveClicked {
ABRecordRef person = ABPersonCreate();
    NSData *dataRef = UIImagePNGRepresentation(imgGet.image);
    CFDataRef cfdata = CFDataCreate(NULL, [dataRef bytes], [dataRef length]);
 ABPersonSetImageData(person, (CFDataRef)dataRef, nil);
    CFErrorRef error;

    ABPersonRemoveImageData(person, &error); // <-- clean any image first from ref
    //ABAddressBookSave(addressBook, &error);

    ABPersonSetImageData(person, cfdata, &error);

    ABAddressBookSave(addressBook, &error);
    CFRelease(cfdata);

最佳答案

此链接提示我如何更新您的图片..

http://davidbits.blogspot.in/2010/01/iphone-update-addressbook-contact.html

在.h文件中声明1个对象

NSInteger recordID;

然后打开联系人列表并使用此方法获取联系人

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController     *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
   recordID  =  ABRecordGetRecordID(person);
    name = [(NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty) autorelease];
    lblName.text = name;
    if(ABPersonHasImageData(person)) {
    CFDataRef imageData = ABPersonCopyImageData(person);
    your uiimage = [UIImage imageWithData:(NSData *)imageData];
    you uiimageview.image = your uiimage;
    CFRelease(imageData);
   } else {
    you uiimageview.image = [UIImage imageNamed:@"ABPicturePerson@2x.png"];
   }

    [self.navigationController dismissViewControllerAnimated:(YES) completion:nil];
    //[self.navigationController dismissModalViewControllerAnimated:YES];
return NO;
}

然后编写保存详细信息或更新详细信息的操作

-(IBAction)btnSaveClicked
{
CFErrorRef *aberror = NULL;    
ABRecordRef aRecord = ABAddressBookGetPersonWithRecordID(addressBook, recordID);
if (aRecord) {
    NSData *dataRef = UIImagePNGRepresentation(your uiimage);
    ABPersonSetImageData(aRecord, (CFDataRef)dataRef, nil);
}
ABAddressBookSave(addressBook, aberror);
//BOOL didAdd = ABAddressBookSave(addressBook, nil);
CFRelease(addressBook);
}

确定你会得到结果..

关于iphone - 如何从地址簿编辑 ABPersonSetImageData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16097897/

相关文章:

iphone - 非全屏 UINavigationController

iphone - 如何为 NavigationController 使用 push Storyboard Segue

iOS 8 ABPeoplePickerNavigationController 多选

objective-c - 是否有可能在类扩展中声明一个 protected ivar 并让父类(super class)能够访问它或改为做什么?

iphone - 如何在 iPhone 中解析 gdata xml?

iphone - 将点数组转换为三角形带的快速方法?

iphone - iOS 上的 Python 或 Ruby 解释器

ios - arm64 首发二月号

ios - 如何从我的 ios 应用程序向 whatsapp 发送图像或文本?

ios - 如何让按钮从下午 3 点到晚上 9 点打开?