Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/98.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Facebook、gmail或任何其他云iOS与cncontactstore取得联系_Ios_Objective C_Iphone_Ios9_Cncontactstore - Fatal编程技术网

通过Facebook、gmail或任何其他云iOS与cncontactstore取得联系

通过Facebook、gmail或任何其他云iOS与cncontactstore取得联系,ios,objective-c,iphone,ios9,cncontactstore,Ios,Objective C,Iphone,Ios9,Cncontactstore,目前,我正在使用此代码片段从iPhone获取联系人 CNContactStore *store = [[CNContactStore alloc] init]; [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) { if (granted == YES) { //k

目前,我正在使用此代码片段从iPhone获取联系人

 CNContactStore *store = [[CNContactStore alloc] init];

    [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (granted == YES) {
            //keys with fetching properties
            NSArray *keys = @[CNContactGivenNameKey,CNContactFamilyNameKey,  CNContactPhoneNumbersKey, CNContactImageDataKey];

            [[CNContactsUserDefaults sharedDefaults] sortOrder];
            NSString *containerId = store.defaultContainerIdentifier;
            //NSComparator hg=   [CNContact comparatorForNameSortOrder:CNContactSortOrderGivenName];

            NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId];
            NSError *error;
            NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&error];

            NSSortDescriptor *sortDescriptor;
            sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"givenName"
                                                         ascending:YES];
            NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
            NSArray *sortedArray = [cnContacts sortedArrayUsingDescriptors:sortDescriptors];

}];
但在这里,我只从iCloud获取联系人

如何从Facebook、gmail或任何其他云获取联系?
请注意这一点。

您必须获取联系人的所有容器,并从单个容器中获取联系人并将其合并

// Get all containers of contacts like icloud contacts , gmail contacts and show all data
    NSArray *allContainers = [store containersMatchingPredicate:nil error:nil];

for (CNContainer *container in allContainers) {
        // create predicate using cncontactstore identifier
        NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:container.identifier];

        // get array of contact using predicate
        NSArray *arrContacts = [[[CNContactStore alloc] init] unifiedContactsMatchingPredicate:predicate keysToFetch:keysToFetch error:nil];
    }

您必须获取联系人的所有容器,从单个容器中获取联系人并合并它们

// Get all containers of contacts like icloud contacts , gmail contacts and show all data
    NSArray *allContainers = [store containersMatchingPredicate:nil error:nil];

for (CNContainer *container in allContainers) {
        // create predicate using cncontactstore identifier
        NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:container.identifier];

        // get array of contact using predicate
        NSArray *arrContacts = [[[CNContactStore alloc] init] unifiedContactsMatchingPredicate:predicate keysToFetch:keysToFetch error:nil];
    }

我花了2天时间解决这个问题,但没有得到任何解决方案

然后用一个补丁就可以了。这是为我工作

if ([container.name isEqualToString:@"Card"]) {
                    NSLog(@"iCloud");
                }else if ([container.name isEqualToString:@"Address Book"]){
                    NSLog(@"google");
                }else if ([container.name isEqualToString:@"Contacts"]){
                    NSLog(@"Yahoo");
                }else{
                    NSLog(@"Other");
                }

我花了2天时间解决这个问题,但没有得到任何解决方案

然后用一个补丁就可以了。这是为我工作

if ([container.name isEqualToString:@"Card"]) {
                    NSLog(@"iCloud");
                }else if ([container.name isEqualToString:@"Address Book"]){
                    NSLog(@"google");
                }else if ([container.name isEqualToString:@"Contacts"]){
                    NSLog(@"Yahoo");
                }else{
                    NSLog(@"Other");
                }