2016-05-28 13 views
2

携帯電話番号を取得しようとしている連絡先に新しい。私はアドレス名の電子メールを持っていますが、携帯電話を理解することはできません。これは私が得たものです。 **の部分は間違っています。連絡先フレームワークから電話番号を取得する方法

if let oldContact = self.contactItem { 
    let store = CNContactStore() 

    do { 
     let mykeysToFetch = [CNContactFormatter.descriptorForRequiredKeysForStyle(.FullName), CNContactEmailAddressesKey, CNContactPostalAddressesKey,CNContactImageDataKey, CNContactImageDataAvailableKey,CNContactPhoneNumbersKey] 
     let contact = try store.unifiedContactWithIdentifier(oldContact.identifier, keysToFetch: mykeysToFetch) 

     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      if contact.imageDataAvailable { 
       if let data = contact.imageData { 
        self.contactImage.image = UIImage(data: data) 
       } 
      } 

      self.fullName.text = CNContactFormatter().stringFromContact(contact) 
      self.email.text = contact.emailAddresses.first?.value as? String 
      self.phoneNumber.text = contact.phoneNumbers.first?.value as? String 

      **if contact.isKeyAvailable(CNContactPhoneNumbersKey){ 
       if let phoneNum = contact.phoneNumbers.first?.value as? String { 
        self.phoneNumber.text = phoneNum as String 
       } 

      }** 

      if contact.isKeyAvailable(CNContactPostalAddressesKey) { 
       if let postalAddress = contact.postalAddresses.first?.value as? CNPostalAddress { 
        self.address.text = CNPostalAddressFormatter().stringFromPostalAddress(postalAddress) 
       } else { 
        self.address.text = "No Address" 
       } 
      } 
     }) 
    } catch { 
     print(error) 
    } 
} 

答えて

4

あなたが連絡先の携帯電話のリストが必要な場合は、CNLabeledValueの配列であるphoneNumbersを見て、CNLabelPhoneNumberMobilelabelまたはCNLabelPhoneNumberiPhoneを有するものを見つけます。あなたが最初のものをしたいのであれば

let mobilePhoneLabels = Set<String>(arrayLiteral: CNLabelPhoneNumberMobile, CNLabelPhoneNumberiPhone, "cell", "mobile") // use whatever you want here; you might want to include a few strings like shown here to catch any common custom permutations user may have used 

let mobileNumbers = contact.phoneNumbers.filter { mobilePhoneLabels.contains($0.label) && $0.value is CNPhoneNumber } 
    .map { ($0.value as! CNPhoneNumber).stringValue } 

はたとえば、次のような何かができる

let mobileNumber = mobileNumbers.first ?? "" // or use `if let` syntax 

をそれとも、それらのリストの文字列表現をしたい場合

let mobileNumberString = mobileNumbers.joinWithSeparator(" ; ") 

この携帯電話番号の配列はあなた次第ですが、うまくいけばb asicのアイデア。

+0

ラベルとCNLabeledValueの違いは何ですか? –

+0

'CNLabeledValue'は、ローカライズの互換性を最大限に高めるために' label '(例えば、 "home"、 "work"、 "mobile"単純な文字列でも構いませんが)、 'value'(数値自体の' CNPhoneNumber')があります。 https://developer.apple.com/library/ios/documentation/Contacts/Reference/CNLabeledValue_Class/index.htmlを参照してください。 – Rob

+0

ありがとうございました:) –

関連する問題