In Kontakt Apps gibt es Gruppen wie "iCloud", "Yahoo", "Gmail". Ist es in swift möglich, nur Kontakt aus der Google Mail-Quelle zu holen?Wie überprüfe ich die Kontaktquelle in CNContact swift?
Antwort
iCloud/Yahoo/Gmail usw. sind CNContainer. Gmail/iCloud ist vom Typ CNContainerTypeCardDAV. Zuerst müssen Sie alle Kontakte abrufen und dann das Array basierend auf dem CNContainerType dieses Kontakts filtern. Aber leider können wir nicht identifizieren, welcher CardDav ist es, iCloud/Gmail.
Bitte mehr Details finden Sie hier: How do we know which CNContainer represents iCloud?
du hier, indem man Kontakte Rahmen-Laufzeitschriften erreichen können: https://github.com/JaviSoto/iOS10-Runtime-Headers/tree/master/Frameworks/Contacts.framework
Sie sie durch performSelector
Nachricht aufrufen können. Es ist ein bisschen chaotisch, aber funktioniert.
Im Allgemeinen, was Sie tun müssen, ist folgende:
CNContactStore* store = [CNContactStore new];
// fetch accounts that sync contacts with your device (array of CNAccount)
// since CNAccount class isn't available by default, we treat it as NSObject for our puproses
NSArray* accounts = [store performSelector:@selector(accountsMatchingPredicate:error:) withObject:nil withObject:nil];
// you can iterate through this array, I just use first one for this example
NSObject* account = [accounts firstObject];
// get identifier of the account for NSPredicate we use next
NSString* accountId = [account performSelector:@selector(identifier)];
// Display name of the account (aka Yahoo, Gmail etc.)
NSString* accountName = [account performSelector:@selector(_cnui_displayName)];
// NSPredicate that help us to get corresponding CNContainer
NSPredicate* containerPredicate = [[CNContainer class] performSelector:@selector(predicateForContainersInAccountWithIdentifier:) withObject:accountId];
// Fetching CNContainer
CNContainer* container = [[store containersMatchingPredicate:containerPredicate error:nil] firstObject];
Danach geht es um den allgemeinen Gebrauch von CNContainers ist. Hoffe, es wird helfen.
PS. Es funktioniert unter iOS 10, für zukünftige Versionen sollten Sie nach Änderungen der Contact.framework-Laufzeit suchen.
PPS. Ich habe nicht schnell gesucht, sollte aber auch arbeiten.
Entschuldigung für mein Englisch. Viel Glück :)
perform Selektor funktioniert nicht für mich und es stürzt ab. Gibt es einen Weg dies zu erreichen? –
@Sunil_Vaishnav können Sie bitte Ihren Code angeben, der den Absturz verursacht? Oder du benutzt die, die ich geschrieben habe? – NewObjective