私は Objective C を初めて使用し、緊急にアプリを作成する必要がある立場にあります。XCode 4.2 を使用しています
アプリの一部で QR コードを検出し、NSString 形式の VCard を取得します: 次のコードを使用して関数を実行しました: -以下をフレームワークにインポートしました:
AddressBookUI.framework
AddressBook.framework
私が書いた.hファイルに:
#import <addressBook/AddressBook.h>
#import <AddressBookUI/AddressBookUI.h>
@interface HellowWorld : UIViewController<ABPeoplePickerNavigationControllerDelegate>{
}
-(IBAction)saveContacts;
@end
私が書いた.mファイルで:
-(IBAction)saveContacts{
NSString *vCardString = test //where the data will be comming from
CFDataRef vCardData = (CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding]; ABAddressBookRef book = ABAddressBookCreate();
ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(book);
CFArrayRef vCardPeople = ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource, vCardData);
for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
ABRecordRef person = CFArrayGetValueAtIndex(vCardPeople, index);
ABAddressBookAddRecord(book, person, NULL);
CFRelease(person);
}
CFRelease(vCardPeople);
CFRelease(defaultSource);
ABAddressBookSave(book, NULL);
CFRelease(book);
}
このコードを使用しましたが、機能しません。
まず、この行をコンパイルしませんでした:
CFDataRef vCardData = (CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];
これを次のように変更する必要がありました:
CFDataRef vCardData = (__bridge CFDataRef)[vCardString dataUsingEncoding:NSUTF8StringEncoding];
コンパイル後、次の行でクラッシュします。
for (CFIndex index = 0; index < CFArrayGetCount(vCardPeople); index++) {
次の緑色のエラーが表示されますThread1: Program Received Signal "EXC_BAD_ACCESS"
。理由はありますか?
また、これが VCard を (NSString 形式で) アドレス帳に保存する唯一の方法ですか? 他の提案はありますか?