2016-08-08 36 views

Antwort

0

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?

0

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 :)

+1

perform Selektor funktioniert nicht für mich und es stürzt ab. Gibt es einen Weg dies zu erreichen? –

+0

@Sunil_Vaishnav können Sie bitte Ihren Code angeben, der den Absturz verursacht? Oder du benutzt die, die ich geschrieben habe? – NewObjective