2016-12-13 3 views
0

Я получаю данные из моей телефонной книги, как показано ниже формата:Как установить алфавитный индексированный uitableview для контакта в объективе-c?

{ 
    "pm_id" : "2", 
    "data" : [ 
    { 
     "pb_local_phonebook_id" : "3BB376E0-62B3-4256-A449-2504FCDDC9CE:ABPerson", 
     "operation" : [ 
     { 
      "pb_address" : [ 

      ], 
      "pb_web_address" : [ 

      ], 
      "pb_name_last" : "", 
      "is_favourite" : "0", 
      "pb_IM_accounts" : [ 

      ], 
      "pb_name_first" : "Adobe", 
      "flag" : "1", 
      "pb_name_suffix" : "", 
      "pb_email_id" : [ 

      ], 
      "pb_relationship" : [ 

      ], 
      "pb_event" : [ 

      ], 
      "pb_birthday" : [ 

      ], 
      "pb_phone_number" : [ 
      { 
       "ph_type" : "Mobile", 
       "ph_no" : "+919800000", 
       "ph_public" : "1", 
       "ph_id" : "1" 
      } 
      ], 
      "pb_name_middle" : "" 
     } 
     ] 
    }, 
    { 
     "pb_local_phonebook_id" : "2DD6AF52-DCD4-4FBB-A033-F95357455422", 
     "operation" : [ 
     { 
      "pb_address" : [ 

      ], 
      "pb_web_address" : [ 

      ], 
      "pb_name_last" : "Affle", 
      "is_favourite" : "0", 
      "pb_IM_accounts" : [ 

      ], 
      "pb_name_first" : "Rishab", 
      "flag" : "1", 
      "pb_name_suffix" : "", 
      "pb_email_id" : [ 

      ], 
      "pb_relationship" : [ 

      ], 
      "pb_event" : [ 

      ], 
      "pb_birthday" : [ 

      ], 
      "pb_phone_number" : [ 
      { 
       "ph_type" : "Other", 
       "ph_no" : "+9199909095", 
       "ph_public" : "1", 
       "ph_id" : "1" 
      } 
      ], 
      "pb_name_middle" : "Puri" 
     } 
     ] 
    } 
] 
} 

Как можно использовать эти данные, чтобы использовать для этого методов для индексации в соответствии с контактами книги IOS?

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
+0

Не могли бы вы рассказать, как вы извлекаете данные из телефонной книги? – iPeter

ответ

0

Я не знаю, как вы получите все контакты, но использовать этот метод для получения всех контактов в массиве: -

- (NSMutableArray *)getContactDetails:(NSString *)keyValue{ 


    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 

    [self accessPermissionToAllowContacts:addressBook]; 

    NSMutableArray *allContacts = [[NSMutableArray alloc] init]; 

    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 

    for(int i = 0; i < ABAddressBookGetPersonCount(addressBook); i++) 
    { 
     ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i); 

     //Using this we get only those contacts details which contact has address 

     ABMultiValueRef addressRef = ABRecordCopyValue(ref, kABPersonPhoneProperty); 


     if (ABMultiValueGetCount(addressRef) > 0) { 

      NSDictionary * contactData = [self singleContactDetail:ref]; 
      [allContacts addObject:contactData]; 
     } 
    } 

    return allContacts; 
} 

Затем использовать этот метод для преобразования в словаре в массив: -

- (NSDictionary *)singleContactDetail:(ABRecordRef)person { 

    // Initialize a mutable dictionary and give it initial values. 

    NSMutableDictionary *contactInfoDict = [[NSMutableDictionary alloc] init]; 

    // Use a general Core Foundation object. 

    CFTypeRef generalCFObject = ABRecordCopyValue(person, kABPersonFirstNameProperty); 

    // Get the first name. 

    if (generalCFObject) { 

     [contactInfoDict setObject:(__bridge NSString *)generalCFObject forKey:@"firstName"]; 


     CFRelease(generalCFObject); 
    } 

    // Get the last name. 

    generalCFObject = ABRecordCopyValue(person, kABPersonLastNameProperty); 

    if (generalCFObject) { 

     [contactInfoDict setObject:(__bridge NSString *)generalCFObject forKey:@"lastName"]; 

     CFRelease(generalCFObject); 
    } 

    NSString* mobileLabel; 

    ABMultiValueRef phones =(__bridge ABMultiValueRef)((__bridge NSString*)ABRecordCopyValue(person, kABPersonPhoneProperty)); 

    for(CFIndex j = 0; j < ABMultiValueGetCount(phones); j++) { 

     mobileLabel = (__bridge NSString*)ABMultiValueCopyLabelAtIndex(phones, j); 

     if(j==0) 
     { 
      [contactInfoDict setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j) forKey:@"HomePhoneNo"]; 
     } 

     if(j==1) 
     { 
      [contactInfoDict setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j) forKey:@"WorkPhoneNo"]; 

     } 

     if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMainLabel]) 

     { 

      [contactInfoDict setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j) forKey:@"MainPhoneNo"]; 

     } 

     if([mobileLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel]) 
     { 

      [contactInfoDict setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j) forKey:@"MobileNo"]; 

     } 

     if ([mobileLabel isEqualToString:(NSString*)kABPersonPhoneIPhoneLabel]) 
     { 
      [contactInfoDict setObject:(__bridge NSString*)ABMultiValueCopyValueAtIndex(phones, j) forKey:@"iPhoneNo"]; 
     } 

    } 

    return contactInfoDict; 
} 
+0

Я использую #import <Контакты/Contacts.h> не инфраструктура адресной книги – puja

+0

Добавьте эту две Framework #import #import <Адресная книгаUI/AddressBookUI.h> – Ketan

Смежные вопросы