这是很好的Objective C的编程习惯经常检查返回布尔值的函数的结果(如ABGroupAddMember
或ABAddressBookSave
或NSArray
或NSDictionary
writeToFile
方法) 之前检查是否有作为参数之一返回的错误。
尝试这样代替:
ABAddressBookRef ab = ABAddressBookCreate();
ABRecordRef abGroupRef = ABAddressBookGetGroupWithRecordID(ab, 1);
ABRecordRef pRef = ABAddressBookGetPersonWithRecordID(ab, 1);
CFErrorRef anError = NULL;
NSError * anErrorAsObjectiveCObject; // for use with toll free bridged object magic
if(ABGroupAddMember(abGroupRef, pRef, &anError))
{
if(ABAddressBookSave(ab, &anError))
{
NSLog(@"successfully saved");
} else {
anErrorAsObjectiveCObject = (__bridge_transfer NSError *) anError;
NSLog(@"error in ABAddressBookSave - %@ %@", [anErrorAsObjectiveCObject domain], [anErrorAsObjectiveCObject localizedDescription]);
}
} else {
anErrorAsObjectiveCObject = (__bridge_transfer NSError *) anError;
NSLog(@"error in ABGroupAddMember - %@ %@", [anErrorAsObjectiveCObject domain], [anErrorAsObjectiveCObject localizedDescription]);
}
请记住,* ABGroupAddMember和AbAddressBookSave都返回BOOL值,如果它们的函数成功。其中之一可能会返回“否”,在这种情况下,您可以检查错误。 – 2011-12-15 19:23:43
确实,我没有检查返回值,但我总是检查不在我的代码中的anError(更好的可读性)。 anError始终为NULL,因此我假设没有发生错误。这是好的假设吗?即使我知道ABGroupAddMember返回了NO,我知道anError是否为NULL?尽管感谢您的帮助! – 2011-12-15 19:32:17