エクスポートには ABPersonCreateVCardRepresentationWithPeople メソッドを使用し、インポートには ABPersonCreatePeopleInSourceWithVCardRepresentation メソッドを使用して、デバイス間で連絡先データを正常に転送しました。ただし、連絡先の「メモ」フィールドのデータは転送されません。これが私のエクスポート機能です:
+(NSData*)exportContactsToVcard:(NSArray*)contacts
{
NSMutableArray *people = [NSMutableArray arrayWithCapacity:contacts.count];
ABAddressBookRef ab = ABAddressBookCreate();
for (Contact *contact in contacts)
{
ABRecordRef person = ABAddressBookGetPersonWithRecordID(ab,contact.contactId);
[people addObject:(__bridge id)person];
}
NSData *vCard = (__bridge NSData*)ABPersonCreateVCardRepresentationWithPeople((__bridge CFArrayRef) people);
return vCard;
}
そして私のインポート機能の一部:
+(NSArray*)importContactsFromVcardData:(NSData*)vcardData
{
NSMutableArray *addedContactIds = [NSMutableArray array];
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef defaultSource = ABAddressBookCopyDefaultSource(addressBook);
NSArray *createdPeople = (__bridge_transfer NSArray*)ABPersonCreatePeopleInSourceWithVCardRepresentation(defaultSource,(__bridge CFDataRef)vcardData);
CFErrorRef error = NULL;
for (id person in createdPeople)
{
error = NULL;
ABRecordRef personRecord = (__bridge ABRecordRef)person;
NSString *notes = (__bridge NSString *)ABRecordCopyValue(personRecord, kABPersonNoteProperty);
最後の行では、連絡先がエクスポートされる前にメモを持っていたとしても、メモは常に nil です。他のすべての標準的な連絡先フィールドは整っているようです。たとえば、最後の行を次のように置き換えると:
NSString *firstName = (__bridge NSString *)ABRecordCopyValue(personRecord, kABPersonFirstNameProperty);
firstName 文字列には、連絡先の名が保持されます。
これを回避し、連絡先メモを取得する方法はありますか?
ありがとう。