2013-10-29 89 views
3

我需要檢索iOS中的Contacts列表。如何在iOS7中簡單檢索聯繫人列表?

這是我的代碼,不工作。

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

    CFErrorRef error = NULL; 
    ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 
    if (addressBook!=nil) 
    { 
     NSArray *allContacts = (__bridge_transfer NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 

     NSUInteger i = 0; 
     for (i = 0; i<[allContacts count]; i++) 
     { 
      Person *person = [[Person alloc] init]; 
      ABRecordRef contactPerson = (__bridge ABRecordRef)allContacts[i]; 
      NSString *firstName = (__bridge_transfer NSString*)ABRecordCopyValue(contactPerson, kABPersonFirstNameProperty); 

      person.firstName = firstName; 
      [myContacts addObject:person]; 
     } 
     CFRelease(addressBook); 

    } 
    else 
    { 
     NSLog(@"Error"); 

    } 

如何獲得Contacts的列表?

+0

你得到了什麼錯誤?你能否將聯繫人存入allContacts數組? –

+0

當我試着用上面的代碼和NSLog測試(@「Count:%i」,contacts.count);它顯示0 bro。它不返回任何聯繫人。 –

回答

6

您需要首先請求訪問用戶的地址簿。設置一個標誌來檢查用戶是否允許/拒絕訪問。

__block BOOL userDidGrantAddressBookAccess; 
CFErrorRef addressBookError = NULL; 

if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined || 
    ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) 
{ 
    addressBook = ABAddressBookCreateWithOptions(NULL, &addressBookError); 
    dispatch_semaphore_t sema = dispatch_semaphore_create(0); 
    ABAddressBookRequestAccessWithCompletion(addressBook, ^(bool granted, CFErrorRef error){ 
     userDidGrantAddressBookAccess = granted; 
     dispatch_semaphore_signal(sema); 
    }); 
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER); 
} 
else 
{ 
    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusDenied || 
     ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusRestricted) 
    { 
     // Display an error. 
    } 
} 

然後,您可以調用您寫入的方法來獲取聯繫人。請記得首先檢查userDidGrantAddressBookAccess的值。

相關問題