从地址簿中获取记录时,应用程序崩溃

时间:2012-12-11 10:04:15

标签: iphone ios addressbook

我需要从地址簿中获取记录。我正在使用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,则我的应用程序崩溃(没有为此人存储电子邮件属性)

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

由于

1 个答案:

答案 0 :(得分:4)

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

//Email
NSString* email = nil;
ABMultiValueRef emailNum = ABRecordCopyValue(person,
                                                 kABPersonEmailProperty);
if (ABMultiValueGetCount(emailNum) > 0) {
    email = (__bridge_transfer NSString*)
    ABMultiValueCopyValueAtIndex(emailNum, 0);
} else {
    email = @"";
}