2017-01-12 5 views
0

Я выборка мобильных контактов с помощью ниже методаКак отличить телефонные номера после извлечения детали из локального контакта

-(void)fetchContactsandAuthorization 
{ 
    // Request authorization to Contacts 
    CNContactStore *store = [[CNContactStore alloc] init]; 
    [store requestAccessForEntityType:CNEntityTypeContacts completionHandler:^(BOOL granted, NSError * _Nullable error) { 
     if (granted == YES) 
     { 
      //make sure that you have added the necessary properties 
      NSArray *keys = @[CNContactFamilyNameKey, CNContactGivenNameKey, CNContactPhoneNumbersKey, CNContactImageDataKey, CNContactPostalAddressesKey]; 
      NSString *containerId = store.defaultContainerIdentifier; 
      NSPredicate *predicate = [CNContact predicateForContactsInContainerWithIdentifier:containerId]; 
      NSError *error; 
      NSArray *cnContacts = [store unifiedContactsMatchingPredicate:predicate keysToFetch:keys error:&error]; 

      NSLog(@"new %@",cnContacts); 

      if (error) 
      { 
       NSLog(@"error fetching contacts %@", error); 
      } 
      else 
      { 
       NSString *phone; 
       NSString *fullName; 
       NSString *firstName; 
       NSString *lastName; 
       NSString *companyName; 
       NSString *departmentName; 
       NSString *jobTitleName; 
       NSString *address; 
       NSString *iden; 
       NSString *emailAddress; 

       UIImage *profileImage; 

       NSMutableArray *contactNumbersArray = [[NSMutableArray alloc]init]; 
       NSMutableArray *addressArray = [[NSMutableArray alloc]init]; 
       NSMutableArray *emailAddressArray = [[NSMutableArray alloc]init]; 
       for (CNContact *contact in cnContacts) { 
        // copy data to my custom Contacts class. 
        firstName = contact.givenName; 
        lastName = contact.familyName; 
        iden = contact.identifier; 


        if (lastName == nil) { 
         fullName=[NSString stringWithFormat:@"%@",firstName]; 
        }else if (firstName == nil){ 
         fullName=[NSString stringWithFormat:@"%@",lastName]; 
        } 
        else{ 
         fullName=[NSString stringWithFormat:@"%@ %@",firstName,lastName]; 
        } 
        UIImage *image = [UIImage imageWithData:contact.imageData]; 

        NSLog(@"imgold %@",image); 
        if (image != nil) { 
         profileImage = image; 
        }else{ 
         profileImage = [UIImage imageNamed:@"person-icon.png"]; 
        } 
        for (CNLabeledValue *label in contact.phoneNumbers) { 
         phone = [label.value stringValue]; 
         if ([phone length] > 0) { 
          [contactNumbersArray addObject:phone]; 
         } 
        } 
        NSLog(@"PhonenumberArray %@",contactNumbersArray); 


        User *user = [User new]; 
        user.fullName=fullName; 
        user.image= profileImage; 
        user.phone= phone; 
        user.idUser= iden; 
        [contacts addObject:user]; 

       } 
       dispatch_async(dispatch_get_main_queue(), ^{ 
        [_selectContactListTblView reloadData]; 
       }); 
      } 
     } 
    }]; 
} 

я в состоянии получить все телефонные номера, связанные с контактом и способен хранить в массив.

PhonenumberArray (
    "98708\U00a001224", 
    "98920\U00a077702", 
    "93240\U00a077702", 
    1, 
    2, 
    3, 
    4, 
    5, 
    5, 
    6, 
    7, 
    8, 
    9 
) 

Теперь я хочу, чтобы дифференцировать в массиве номера телефонов, как домашний, мобильный, факс, пейджер и т.д. Любая помощь будет очень ценна.

+0

http://stackoverflow.com/a/34651556/6656894 передать этот ANS –

+0

@HimanshuMoradiya, проверьте ссылку. Он показывает, как получить phonenumber, который я уже могу сделать. Мой вопрос заключается в том, чтобы идентифицировать ярлык phonenumber, например, домашний или мобильный и т. Д. – Madhu

ответ

0

Свойство метки CNLabeledValue вернет строку, которая представляет собой домашний, мобильный и т. Д. Затем вызовите [CNLabeledValue localizedStringForLabel:labelString], чтобы получить локализованную для человека строку.

for (CNLabeledValue *label in contact.phoneNumbers) { 
    phone = [label.value stringValue]; 
    labelString = label.label; 
    if ([phone length] > 0) { 
     [contactNumbersArray addObject:phone]; 
     [contactNumbersLabelsArray addObject:labelString]; 
    } 

}

+0

, если возможно, вы можете отправить код примера для вызова [CNLabeledValue localizedStringForLabel: labelString] – Madhu

0

Проверить этот блог https://genericswift.wordpress.com/, он будет получать все контакты из контактов магазина и будет отличать его дома, мобильный, факс, пейджер и т.д.

код находится в этой ссылке Github https://github.com/VinupriyaArivazhagan/AVContactPickerController

Просто нужна строка кода pesent вида контроллера со всеми надуманными контактами

AVContactPickerController.present(title: "Contact", maximumContactCount: nil, updateDesign: nil) 

и может обновить дизайн, а также

AVContactPickerController.present(title: "Contact", maximumContactCount: 2, updateDesign: { controller in 

      controller.checkImage = #imageLiteral(resourceName: "Clicked") 
      controller.uncheckImage = #imageLiteral(resourceName: "Click") 
      controller.closeButton.setTitleColor(UIColor.red, for: .normal) 
     }) 
+0

Это быстро. Мой код объективен c. Пожалуйста, разместите любую ссылку, относящуюся к объекту c. – Madhu

+0

@Madhu, вы можете вызвать функцию swift класса из объектного c, добавить этот быстрый файл в папку проекта, сделать необходимые шаги (просто google, чтобы получить дополнительную информацию), тогда вы можете вызвать функцию swift класса из объектного файла класса c –

+0

See что блог о том, как использовать этот быстрый файл –