2015-06-20 6 views
-1

Мне нужно сделать UITableView, который извлекает в нем содержимое адресной книги, а также UISearchBar, который ищет содержимое адресной книги.UIAddressBook в UITableView с NSObjectClass

мне нужна реализация этого проекта, как

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

+0

Вы просите код, чтобы получить доступ к адресной книге и заполнить UITableView? – Woodstock

+0

здесь вы http://www.ioscreator.com/tutorials/retrieving-contacts-from-the-address-book – Woodstock

+0

Мне нужно реализовать это, взяв класс nsobject, потому что мне тоже нужна панель поиска. Мне просто нужна реализация, как в ссылке, приведенной выше. @woodstock –

ответ

0

Я создал ContactData NSObject Class. В следующем методе я создаю его объект для каждого контакта. В конце вы получите NSMutableArray с именем contactArr.

- (Недействительными) loadContacts {

ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); 

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { 
    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { 
     ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 
     //NSLog(@"%@", addressBook); 
    }); 
} 
else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { 

    CFErrorRef *error = NULL; 
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); 
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 
    CFIndex numberOfPeople = ABAddressBookGetPersonCount(addressBook); 

    for(int i = 0; i < numberOfPeople; i++) { 

     ABRecordRef person = CFArrayGetValueAtIndex(allPeople, i); 

     NSString *firstName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonFirstNameProperty)); 
     NSString *lastName = (__bridge NSString *)(ABRecordCopyValue(person, kABPersonLastNameProperty)); 

     ContactData *dataObj = [[ContactData alloc]init]; 
     NSString *Name = @" "; 

     if ([firstName length]>0) { 

      if ([lastName length]>0) { 

       Name = [NSString stringWithFormat:@"%@ %@",firstName,lastName]; 
      } 
      else{ 
       Name = firstName; 
      } 
     } 
     else{ 
      Name = @" "; 
     } 

     ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty); 
     [[UIDevice currentDevice] name]; 
     //NSLog(@"\n%@\n", [[UIDevice currentDevice] name]); 

     NSString *phoneNumber = @" "; 

     for (CFIndex i = 0; i < ABMultiValueGetCount(phoneNumbers); i++) { 
      phoneNumber = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex(phoneNumbers, i); 
     } 

     ABMultiValueRef Emails = ABRecordCopyValue(person, kABPersonEmailProperty); 
     [[UIDevice currentDevice] name]; 

     NSString *Email; //= @" "; 

     for (CFIndex i = 0; i < ABMultiValueGetCount(Emails); i++) { 
      Email = (__bridge_transfer NSString *) ABMultiValueCopyValueAtIndex(Emails, i); 

     } 

     ABMultiValueRef Addresses = ABRecordCopyValue(person, kABPersonAddressProperty); 

     NSString *address = @" "; 
     NSMutableDictionary* addressDict = [[NSMutableDictionary alloc]init]; 

     for (CFIndex i = 0; i < ABMultiValueGetCount(Addresses); i++) { 
      addressDict = (__bridge_transfer NSMutableDictionary *) ABMultiValueCopyValueAtIndex(Addresses, i); 

      //NSLog(@"address = %@", addressDict); 

      NSString * street = [addressDict objectForKey:@"Street"]; 
      NSString * city = [addressDict objectForKey:@"City"]; 
      NSString * state = [addressDict objectForKey:@"State"]; 
      NSString *country = [addressDict objectForKey:@"Country"]; 


      if (country.length>0 || state.length>0 || city.length>0 || street.length>0) { 

       if (country.length>0 && state.length>0) { 

        address = [NSString stringWithFormat:@"%@, %@", state,country]; 
       } 
       else if(country.length>0 && city.length>0){ 
        address = [NSString stringWithFormat:@"%@, %@", city,country]; 
       } 
       else if (state.length>0 && street.length>0){ 
        address = [NSString stringWithFormat:@"%@, %@", street,country]; 
       } 
       else if (state.length>0 && city.length>0){ 
        address = [NSString stringWithFormat:@"%@, %@", city,state]; 
       } 
       else if (state.length>0 && street.length>0){ 
        address = [NSString stringWithFormat:@"%@, %@", street,state]; 
       } 
       else if (city.length>0 && street.length>0){ 
        address = [NSString stringWithFormat:@"%@, %@", street,city]; 
       } 
       else if (country.length>0){ 
        address = country; 
       } 
       else if (state.length>0){ 
        address = state; 
       } 
       else if (city.length>0){ 
        address = city; 
       } 
      } 
      else{ 
       address = @" "; 
      } 
     } 

     //NSLog(@"address = %@", address); 

     NSData *imgData = (__bridge_transfer NSData *) ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail); 

     dataObj.name = Name; 
     dataObj.email = Email; 
     dataObj.phone = phoneNumber; 
     dataObj.imageData = imgData; 
     dataObj.address = address; 

     [contactArr addObject:dataObj]; 

    } 
    NSLog(@"contacts loaded"); 
    //NSLog(@"count = %lu", (unsigned long)contactArr.count); 
} 
else { 

    //Go to settings and allow access to use contacts[GlobalFunction removeWaitView]; 

} 

}

+0

спасибо. Это то, что я хотел @aadhya –

0

Сначала убедитесь, что у вас есть правильные рамки импортированы:

#import <AddressBook/AddressBook.h> 

Fetch контактов AddressBook как это:

ABAddressBookRef addressBook = ABAddressBookCreate(); 
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); 
CFIndex nPeople = ABAddressBookGetPersonCount(addressBook); 

for (int i = 0; i < nPeople; i++) 
{ 
    ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, i); 
    //further code 
} 

Затем заполнить UITableView как обычно (как в примере, вы уже обеспечили).

К счастью, этот механизм устарел. Новый API контактов в iOS 9 великолепный.

+0

Мне нужно реализовать это, взяв класс объектов ns, потому что мне нужна панель поиска. Мне просто нужна реализация, как в ссылке, приведенной выше. .. @ Woodstock. –