在我的应用中,我可以访问设备地址簿,选择联系人并收到他的电子邮件。
由于联系人没有任何电子邮件,我必须计算电子邮件地址的数量。如果我没有,我可以获得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'
感谢您的回答
答案 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
}