分段错误将CFErrorRef桥接到NSError

时间:2016-06-03 20:38:43

标签: ios objective-c

我在以下代码中遇到崩溃,其中从CFErrorRef转换为NSError的桥是。

  

由于信号退出服务:分段错误:11

    CFErrorRef cfError = NULL;
    ABMultiValueAddValueAndLabel(phoneNumbers, (__bridge CFStringRef) spam.number, (__bridge CFStringRef) label, &cfError);
    if (cfError != nil)
    {
        NSError *error = [[NSError alloc] initWithDomain:@"PlaceholderErrorDomain" code:-99999 userInfo: nil];
        error = (__bridge NSError *)cfError;
        NSLog(@"Error adding phone number to contact. %d %@", error.code, [error.userInfo description]);
    }

在ABMultiValueAddValueAndLabel()执行后,cfError的值为0x1。这应该是一个分配的CFErrorRef对象的有效地址吗?

有关原因/解决方法的任何建议吗?

1 个答案:

答案 0 :(得分:0)

您的主要问题是ABMultiValueAddValueAndLabel的第4个参数不是错误。它是用于获取标识符的。

要查看值是否已添加,请查看ABMultiValueAddValueAndLabel是返回true还是false。但是,如果它失败,你将无法获得有关它失败的原因的任何信息。

ABMultiValueIdentifier identifier;
if (!ABMultiValueAddValueAndLabel(phoneNumbers, (__bridge CFStringRef) spam.number, (__bridge CFStringRef) label, &identifier) {
    // Unable to add value and label but there is no error to tell you why
}