2011-12-15 91 views
2

下面的代码在模拟器(iOS 4和iOS 5)中运行良好,但在iOS 4设备上没有任何联系。没有错误返回。你有什么想法,为什么?ABGroupAddMember无法在iOS4设备上工作

ABAddressBookRef ab = ABAddressBookCreate(); 
abGroupRef = ABAddressBookGetGroupWithRecordID(ab, 1); 
ABRecordRef pRef = ABAddressBookGetPersonWithRecordID(ab, 1); 
ABGroupAddMember(abGroupRef, pRef, &anError); 
ABAddressBookSave(ab, &anError); 

感谢, --Josef

+0

请记住,* ABGroupAddMember和AbAddressBookSave都返回BOOL值,如果它们的函数成功。其中之一可能会返回“否”,在这种情况下,您可以检查错误。 – 2011-12-15 19:23:43

+0

确实,我没有检查返回值,但我总是检查不在我的代码中的anError(更好的可读性)。 anError始终为NULL,因此我假设没有发生错误。这是好的假设吗?即使我知道ABGroupAddMember返回了NO,我知道anError是否为NULL?尽管感谢您的帮助! – 2011-12-15 19:32:17

回答

1

的问题是,从接触谷歌通过交换同步者。只能有本地组,本地组只能保存本地联系。这很公平,但如果ABGroupAddMember不添加成员,它应该返回一个错误。

1

这是很好的Objective C的编程习惯经常检查返回布尔值的函数的结果(如ABGroupAddMemberABAddressBookSaveNSArrayNSDictionarywriteToFile方法) 之前检查是否有作为参数之一返回的错误。

尝试这样代替:

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]); 
} 
+0

那么,正如我在前面的评论中写的,我这样做,但错误为空。你的代码返回这个“ABGroupAddMember - (null)(null)”中的错误。所以我知道这是行不通的,我只是不知道为什么:-( – 2011-12-15 20:19:59

相关问题