将联系人添加到不在设备上工作但在ABAddressbook中使用模拟器的组 不会出现错误,但联系人中的特定组不会反映联系人 但在模拟器上工作正常
我正在使用此代码
if (person) {
ABAddressBookAddRecord(addressBook, person, nil);
ABAddressBookSave(addressBook, &error);
BOOL isADDED = ABGroupAddMember(groupNameRef, person, &error);
NSError *error1 = (__bridge_transfer NSError *)error;
NSLog(@"Reason = %@", error1.localizedFailureReason);
BOOL iSSaved = ABAddressBookSave(addressBook, &error);
}
在模拟器上运行正常,但在设备上运行
答案 0 :(得分:2)
它将帮助您正确使用错误检查。以下是错误检查例程的结构:
if (person) {
bool ok;
CFErrorRef err = nil;
ok = ABAddressBookAddRecord(addressBook, person, &err);
if (!ok) {
NSLog(@"%@", err);
return;
}
ok = ABAddressBookSave(addressBook, &err);
if (!ok) {
NSLog(@"%@", err);
return;
}
ok = ABGroupAddMember(groupNameRef, person, &err);
if (!ok) {
NSLog(@"%@", err);
return;
}
ok = ABAddressBookSave(addressBook, &err);
if (!ok) {
NSLog(@"%@", err);
return;
}
}
注意这里的模式。该函数返回一个bool。你检查那个布尔。如果为false,则检查间接返回的错误。如果您正确遵循此模式,您将获得有关出错的更好信息。
修改:确保您确实可以访问联系人数据库。我假设你这样做,但模拟器和设备之间的主要区别在于模拟器自动授予访问权限,而在设备上必须向用户显示访问请求对话框(调用ABAddressBookRequestAccessWithCompletion
)或者在那里将无法访问,尝试使用联系人数据库将失败,可能是无声的。