将联系人添加到不在设备上工作但在 ABAddressbook 中的模拟器上工作的组 没有给出错误,但联系人未反射(reflect)在联系人的特定组中 但在模拟器上运行良好
我正在使用此代码
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);
}
在模拟器上工作正常,但在设备上不工作
最佳答案
它将帮助您开始正确使用错误检查。以下是错误检查例程的结构:
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 值。你检查一下那个 bool 值。如果为 false,则检查间接返回的错误。如果您正确遵循此模式,您将获得有关问题所在的更好信息。
编辑:确保您确实有权访问联系人数据库。我假设您这样做,但模拟器和设备之间的主要区别在于模拟器会自动授予访问权限,而在设备上必须向用户显示访问请求对话框(调用ABAddressBookRequestAccessWithCompletion
)否则将无法访问,并且使用联系人数据库的尝试将会失败,甚至可能会默默失败。
关于iPhone:将联系人添加到不在设备上工作但在 ABAddressbook 中的模拟器上工作的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16568304/