【问题标题】:ABGroupAddMember does not work on iOS4 deviceABGroupAddMember 在 iOS4 设备上不起作用
【发布时间】:2011-12-15 19:14:28
【问题描述】:

下面的代码在模拟器(iOS 4 和 5)中运行良好,但在 iOS 4 设备上没有添加任何联系人。不返回错误。你知道为什么吗?

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

谢谢, --约瑟夫

【问题讨论】:

  • 请记住,both ABGroupAddMemberAbAddressBookSave 如果函数成功,则返回 BOOL 值。其中一个可能返回NO,在这种情况下,您可以检查该错误。
  • 确实我不检查返回值,但我总是检查上面代码中没有的 anError(更好的可读性)。 anError 始终为 NULL,因此我假设没有发生错误。这是一个好的假设吗?即使我知道 ABGroupAddMember 已返回 NO,如果 anError 为 NULL,我怎么知道?不过感谢您的帮助!

标签: iphone objective-c ios xcode addressbook


【解决方案1】:

Objective C 编程习惯总是检查返回 BOOL 值的函数的结果(例如 ABGroupAddMemberABAddressBookSaveNSArrayNSDictionary 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 中的错误 - (null) (null)”。所以我知道它不起作用,我只是不知道为什么:-(
  • abGroupRefpRef 在进入ABGroupAddMember 函数时不为空?
  • 两者都不为空:abGroupRef:<0x4b645a0 abgroup><0x4b64cd0 abperson>
  • &anError
【解决方案2】:

问题是联系人来自谷歌,通过 Exchange 同步。只能有本地组,本地组只能拥有本地联系人。这有点公平,但如果 ABGroupAddMember 不打算添加成员,它应该返回错误。

【讨论】:

  • 嗨 devZone.touchDude.com 我也面临同样的问题 将联系人添加到在模拟器上正常工作的组中,但在 iPhone 设备上没有找到解决此问题的方法 Plzz Share
  • 在我的情况下,根案例是使用交换同步联系人。这些可能不使用组(至少在这样做的时候不能)。所以我不再依赖组并实现了我自己的 -> 对你来说不是一个真正的解决方案,对吧?
  • 感谢 devZone.touchDude.com 的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多