iPhone:将联系人添加到不在设备上工作但在ABAddressbook中使用模拟器的组

时间:2013-05-15 14:51:07

标签: iphone ios abaddressbook

将联系人添加到不在设备上工作但在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);
}

在模拟器上运行正常,但在设备上运行

1 个答案:

答案 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)或者在那里将无法访问,尝试使用联系人数据库将失败,可能是无声的。