1

ABUnknownPersonViewControllerを使用して、名前と画像を含む新しいアドレス帳エントリを作成して、情報を既存の人に追加するか、新しい人として追加するかを尋ねようとしています。アドレス帳のプログラミング ガイドとここへのいくつかの投稿によると、次のコードを使用しています。

ABUnknownPersonViewController *view = [[ABUnknownPersonViewController alloc] init];
view.unknownPersonViewDelegate = self;

CFErrorRef error = NULL;

// Create a new person record
ABRecordRef person = ABPersonCreate();
ABRecordSetValue(person, kABPersonFirstNameProperty, (__bridge CFTypeRef)(_nameTextField.text), &error);
ABRecordSetValue(person, kABPersonNoteProperty, (__bridge CFTypeRef)(_descriptionTextField.text), &error);

//NSData *imageData = UIImageJPEGRepresentation(_image, 0.8);
NSData *imageData = UIImagePNGRepresentation(_image);

CFDataRef dataRef = (__bridge CFDataRef)imageData;

ABRecordSetValue(person, kABPersonImageFormatOriginalSize, dataRef, &error);

// 
view.displayedPerson = person;

view.allowsAddingToAddressBook = YES;

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:view];
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(closeAddressBook)];
view.navigationItem.leftBarButtonItem = doneButton;

navController.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;

[self presentModalViewController:navController animated:YES];

コードをステップ実行すると、dataRef が 1.8MB の画像データで正しく初期化されていることがわかります。ただし、このコードを実行すると、アプリは次のエラーでクラッシュしました。

-[NSConcreteMutableData count]: unrecognized selector sent to instance 0x77f7ce0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSConcreteMutableData count]: unrecognized selector sent to instance 0x77f7ce0'

問題のオブジェクトは imageData オブジェクトです。

imageData を省略すると、アプリは正常に動作し、名前だけで新しいアドレス帳エントリが作成されます。

ここで何が起こっているのか分かりますか?

4

1 に答える 1

1

画像から NSData を作成した後、画像を設定するには、この機能を試してください。

ABPersonSetImageData (
   ABRecordRef person,
   CFDataRef imageData,
   CFErrorRef *error
);
于 2013-05-14T06:19:21.943 に答える