从地址簿中查看个人资料中的电子邮件地址

时间:2015-07-07 13:24:25

标签: ios swift casting

在我的应用中,我可以访问设备地址簿,选择联系人并收到他的电子邮件。

由于联系人没有任何电子邮件,我必须计算电子邮件地址的数量。如果我没有,我可以获得nil值并且应用程序崩溃。

我尝试了很多方法,但我总是遇到问题。

当我写这段代码时:

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!) {
    var emails: ABMultiValueRef = ABRecordCopyValue(person, kABPersonEmailProperty) as! ABMultiValueRef
    var countEmails = ABMultiValueGetCount(emails)

我收到此错误:

Could not cast value of type 'Swift.Unmanaged<Swift.AnyObject>' (0x7f9f12db3c88) to 'Swift.AnyObject'

感谢您的回答

2 个答案:

答案 0 :(得分:0)

您的目标是iOS 9吗?其中一些api已被弃用。

  • kABPersonEmailProperty应为CNContact.emailAddresses
  • ABMultiValueRef应为[CNLabeledValue]

答案 1 :(得分:0)

使用此代码获取阵列中的所有电子邮件地址

let emailProperty: ABMultiValueRef = ABRecordCopyValue(record, kABPersonEmailProperty).takeRetainedValue() as ABMultiValueRef        

let allEmailIDs: NSArray = ABMultiValueCopyArrayOfAllValues(emailProperty).takeUnretainedValue() as NSArray

for email in allEmailIDs 
{            
    let emailID = email as String
    println ("contactEmail : \(emailID) :=>")
}

如果您想查看电子邮件数量,请使用

let allEmailIDs: NSArray = ABMultiValueCopyArrayOfAllValues(emailProperty).takeUnretainedValue() as NSArray

所以我之前添加了一张支票,以确保有任何电子邮件。

if ABMultiValueGetCount(emailProperty) > 0 {
  let allEmailIDs: NSArray = ABMultiValueCopyArrayOfAllValues(emailProperty).takeUnretainedValue() as NSArray
}