2016-01-11 12 views
11

Ich möchte den Ländercode und die Telefonnummer von CNContact auf iOS 9 erhalten. Ich habe viele Dinge ausprobiert, konnte aber keinen Weg finden. Das beste Ergebnis, das ich erreicht ist Druck:iOS 9: CNKontakt Ländervorwahl und Telefonnummer

<CNPhoneNumber: 0x7f886389a140: countryCode=us, digits=5555648583> 

Hier ist, wie ich das tun:

func contactPicker(picker: CNContactPickerViewController, didSelectContact contact: CNContact) { 
    print(contact.phoneNumbers.count) 
    for number: CNLabeledValue in contact.phoneNumbers { 
     print(number.value) 
    } 
} 

Was ich möchte, dass die Werte für Ländercode und Ziffern ist. Irgendwelche Ideen, wie man in Swift auf sie zugreift? Vielen Dank!

Antwort

6

Leider können Sie sie nicht bekommen, da sie privat sind.

let numberValue = number.value 

let countryCode = numberValue.valueForKey("countryCode") as? String 
let digits = numberValue.valueForKey("digits") as? String 

Dies funktioniert, aber wenn Sie etwas tun, in diesen Zeilen Ihre App werden höchstwahrscheinlich abgelehnt.

Sie können alle schönen Sachen sehen, die Sie verwenden könnten here.

Wenn Sie nicht auf dem Hochladen Ihre App in den Laden planen über die Lösung in Ordnung ist, sonst wäre ich mit irgendeiner Art von Regex-Stick zu wissen, es in Zukunft brechen:

countryCode=(\w{2}),.*digits=(.+)>$ 
+0

Bitte verwenden Sie keine erzwungene Unwrap, erhalten Sie einen Absturz, wenn der Wert ist "Null" – Cristik

+0

Danke für die Berührung :) – fpg1503

+0

Vielen Dank! Wahrscheinlich konnte ich deshalb keine Lösung finden. Ich werde die Regex für jetzt verwenden. –

0

Sie zwei Mitglieder können über valueForKey zugegriffen werden:

let countryCode = number.valueForKey("countryCode") as? String 
let digits = number.valueForKey("digits") as? String 

Bitte beachten Sie, aufgrund der Tatsache, dass diese beiden Felder Teil einer privaten API sind, gibt es keine Garantie, dass in den zukünftigen Versionen des Contacts Rahmen Sie werden nicht entfernt/ersetzt.

4

Objective-C:

[number.value valueForKey:@"countryCode"] 

Swift:

number.value.valueForKey("countryCode") as? String 

valueForKey ist nicht privat und Ihre App wird nicht abgelehnt.

+0

können Sie kommentieren, wie es nicht privat ist? Laut fpg1503 scheint es gegen Richtlinie 2.5 zu verstoßen, weil sie nicht dokumentiert ist. Ich würde es lieben, wenn du recht hast, ich würde es gerne wissen! Vielen Dank. – nickpharris

+0

Sie werden abgelehnt, wenn Sie dies verwenden, wenn Sie nicht Glück haben, aber das verletzt Apple Richtlinien – fpg1503

+0

sein Geben IN nicht +91 :( –

0

/* Get nur erste Mobilnummer */

let MobNumVar = (contact.phoneNumbers[0].value as! CNPhoneNumber).valueForKey("digits") as! String 
    print(MobNumVar) 

/* Holen Sie sich alle Handynummer */

for ContctNumVar: CNLabeledValue in contact.phoneNumbers 
    { 
     let MobNumVar = (ContctNumVar.value as! CNPhoneNumber).valueForKey("digits") as? String 
     print(MobNumVar!) 
    } 

/* Get Handynummer mit mobilen Ländercode */

for ContctNumVar: CNLabeledValue in contact.phoneNumbers 
    { 
     let FulMobNumVar = ContctNumVar.value as! CNPhoneNumber 
     let MccNamVar = FulMobNumVar.valueForKey("countryCode") as? String 
     let MobNumVar = FulMobNumVar.valueForKey("digits") as? String 

     print(MccNamVar!) 
     print(MobNumVar!) 
    } 
-1

Um den Ländercode zu erhalten, können Sie diesen verwenden:

(contact.phoneNumbers[0].value).value(forKey: "countryCode") as! String 

in for-Schleife und Schlüssel; "Ziffern" soll die volle Telefonnummer bekommen.