1

我需要从通讯录中获取记录。我正在使用 ABPeoplePickerNavigationController 这样做。在获取记录时,我正在设置一个检查条件来检查记录是否存在。例如,要检查是否有名字,我正在使用以下代码

NSString *fname;
CFTypeRef fnameProperty = ABRecordCopyValue(person, kABPersonFirstNameProperty);
if (ABRecordCopyValue(person, kABPersonFirstNameProperty)) {
    fname = (__bridge NSString*)fnameProperty;
}
else{
    fname = @"";
}

该代码非常适用于 kABPersonFirstNameProperty。

但是当我使用以下代码检查电子邮件属性时

ABMultiValueRef emailProperty = ABRecordCopyValue(person, kABPersonEmailProperty);
NSLog(@"%@",emailProperty);
NSString *email;
if (ABRecordCopyValue(person, kABPersonEmailProperty)) {
    email = (__bridge NSString*)ABMultiValueCopyValueAtIndex(emailProperty, 0);
}
else {
   email = @"";
}

如果 kABPersonEmailProperty 为 nil,我的应用程序崩溃(没有为该人存储电子邮件属性)

有人可以解释一下为什么会这样吗?

谢谢

4

1 回答 1

4

这是我的工作版本,看看这是否有效。

//Email
NSString* email = nil;
ABMultiValueRef emailNum = ABRecordCopyValue(person,
                                                 kABPersonEmailProperty);
if (ABMultiValueGetCount(emailNum) > 0) {
    email = (__bridge_transfer NSString*)
    ABMultiValueCopyValueAtIndex(emailNum, 0);
} else {
    email = @"";
}
于 2012-12-11T10:28:50.620 回答