2016-05-10 4 views
0
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 = "" 
    } 

エラー行が最初の行であるに電話番号を取得しようとすると、「致命的なエラーオプションの値をアンラップしながら、予想外にnilを見つけ」 "let"がうまくいかない場合は?あなたはtakeRetainedValueを呼び出す前に、戻り値:私は接触

編集上の()それを確認する必要があるので、

+1

「con」とは何か、「kABPersonPhoneProperty」とは何ですか? – luk2302

+0

conは、ABAddressBookRef変数です。 kABPersonPhonePropertyは連絡先のプロパティです。 – user6313944

答えて

1

ABRecordCopyValueは、nilを返すことができます - 私は私の問題を解決した

let copiedValue = ABRecordCopyValue(con,kABPersonPhoneProperty) 
if let phone = copiedValue?.takeRetainedValue() { 
.... 
+0

ありがとうございます!私はあなたのコードを使用して私の問題を解決しました! – user6313944

+0

喜んで助けてください。正しい答えとして受け入れてください。 – Roee84

0

ような何かを行います。そして正しいコードは次のようになります:

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 = "" 
    } 
関連する問題