【问题标题】:App crashes when fetching record from address book从通讯录中获取记录时应用程序崩溃
【发布时间】:2012-12-11 10:04:14
【问题描述】:

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

谁能解释一下为什么会这样?

谢谢

【问题讨论】:

  • 请发布显示的错误
  • @Dpk 错误为 EXC_BAD_ACCESS(code=2, address=0x0)

标签: iphone ios addressbook


【解决方案1】:

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

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

【讨论】:

  • 您的 if 语句没有检查是否有电子邮件。
  • 您尝试使用的联系人可能有姓名但没有电子邮件地址?
猜你喜欢
  • 1970-01-01
  • 2014-12-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
  • 2015-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多