3

私は、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);

}

4

2 に答える 2

3

このリンクは、画像を更新する方法のヒントです..

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);
}

必ず結果が出ます..

于 2013-04-20T12:39:54.100 に答える
2

更新する場合に使用ABRecordRef personします。

まずcreate ABAddressBookRef

// Request authorization to Address Book
ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL);

check person持っていますimage

if(ABPersonHasImageData(person)) 
{
   //remove image as we want to update to new image
   NSError *anError;
   if(ABPersonRemoveImageData(person, &anError))
      NSLog(@"removed");
   else
      NSLog(@"%@",[anError description]);
}

Update

 UIImage *image = image here;
 NSData *picData = UIImageJPEGRepresentation(image, 0.9f);
 ABPersonSetImageData(person, (CFDataRef)picData, nil);

電話saving function

 ABAddressBookSave(addressBookRef, nil);
于 2013-04-19T06:03:45.110 に答える