В моем приложении я могу получить доступ к адресной книге устройства, чтобы выбрать контакт и получить его электронную почту.
Из-за контактов, у которых нет электронной почты, мне приходится считать количество адресов электронной почты. Если я этого не сделаю, я могу получить значение 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 ответа
Вы ориентируетесь на iOS 9? Некоторые из этих API устарели.
kABPersonEmailProperty
должно бытьCNContact.emailAddresses
ABMultiValueRef
должно быть[CNLabeledValue]
Используйте этот код, чтобы получить все адреса электронной почты в массиве
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
}
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.