gpt4 book ai didi

iphone - 将联系人从一个源复制到另一个源

转载 作者:行者123 更新时间:2023-12-03 20:28:13 25 4
gpt4 key购买 nike

我正在尝试在本地联系人源和 iCloud 联系人源之间复制联系人,但没有看到任何结果。这段代码执行时没有错误,看起来应该可以工作,但之后我看不到新创建的联系人。有人发现有什么问题吗?

ABAddressBookRef addressBook = ABAddressBookCreate();

ABRecordRef abSourceSource = ABAddressBookGetSourceWithRecordID(addressBook, kABSourceTypeLocal);
ABRecordRef abDestinationSource = ABAddressBookGetSourceWithRecordID(addressBook, kABSourceTypeCardDAV);

CFArrayRef sourceContacts = ABAddressBookCopyArrayOfAllPeopleInSource(addressBook, abSourceSource);
CFArrayRef destinationContacts = ABAddressBookCopyArrayOfAllPeopleInSource(addressBook, abDestinationSource);

ABPersonCreatePeopleInSourceWithVCardRepresentation(abDestinationSource, ABPersonCreateVCardRepresentationWithPeople(sourceContacts));
ABPersonCreatePeopleInSourceWithVCardRepresentation(abSourceSource, ABPersonCreateVCardRepresentationWithPeople(destinationContacts)));

ABAddressBookSave(addressBook, NULL);

最佳答案

还有一个更根本的问题 - 您没有正确调用 ABAddressBookGetSourceWithRecordID。它采用的第二个参数是一个 int,指定地址簿中特定源的记录 ID。您向其传递一个描述特定源类型的常量。

您传递的常量 kABSourceTypeCardDav 始终为 4。但是,用户地址簿中 iCloud 源的记录 ID 可能非常不同。

您需要做的是枚举所有源并测试它们的类型,如下所示:

NSArray *allSources = (NSArray*)ABAddressBookCopyArrayOfAllSources(addressBook);

for (int i = 0; i < allSources.count; i++) {
ABRecordRef src = [allSources objectAtIndex:i];
NSNumber *stObj = (NSNumber*)ABRecordCopyValue(src, kABSourceTypeProperty);
ABSourceType st = (ABSourceType)[stObj intValue];

if (st == kABSourceTypeCardDAV) {
int recordID = ABRecordGetRecordID(src);
break;
}
}

然后您可以使用 recordID 作为第一个函数的参数

关于iphone - 将联系人从一个源复制到另一个源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7898238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com