if let phone:ABMultiValueRef = ABRecordCopyValue(con,kABPersonPhoneProperty).takeRetainedValue()
   {
        for (var k = 0 ; k < ABMultiValueGetCount(phone) ; ++k){
            //获取电话Label
            var personPhoneLabel:String   = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(phone, k).takeRetainedValue()).takeRetainedValue()as String
            //获取該Label下的电话值
            var personPhone:String = ABMultiValueCopyValueAtIndex(phone, k).takeRetainedValue() as! String
            phoneNum = personPhone
            print(personPhoneLabel+":"+personPhone)
        }
    }
    else{
        phoneNum = ""
    }

Строка ошибки - это первая строка:

 if let phone:ABMultiValueRef = ABRecordCopyValue(con, kABPersonPhoneProperty).takeRetainedValue() 

Почему не работает «если пусть»?

ios
0
user6313944 10 Май 2016 в 11:09

2 ответа

Лучший ответ

ABRecordCopyValue может возвращать nil, поэтому вам необходимо проверить его, прежде чем вызывать takeRetainedValue () для возвращаемого значения.

Изменить - сделать что-нибудь вроде

let copiedValue = ABRecordCopyValue(con,kABPersonPhoneProperty)
if let phone = copiedValue?.takeRetainedValue() {
....
1
Roee84 10 Май 2016 в 08:23

Я решил свою проблему. И правильный код вроде:

if let unmanagedPhone = ABRecordCopyValue(con, kABPersonPhoneProperty){
        var phone:ABMultiValueRef = unmanagedPhone.takeUnretainedValue()

        if let unmanagedPhoneNumberArray = ABMultiValueCopyArrayOfAllValues(phone){
            var phoneNumberArray = unmanagedPhoneNumberArray.takeUnretainedValue() as NSArray
            phoneNum = phoneNumberArray[0] as! String
        }
    }
    else{
        phoneNum = ""
    }
0
vadian 14 Май 2016 в 04:21