2013-03-11 6 views
0

Я попытался получить все электронные письма, сохраненные в контактах, я могу получить e-mail в ipod, но когда я тестирую на iphone, он показывает, что массивы имеют значение null. Но есть контакты в моем iphoneНе удается найти контакты с iPhone

Почему это происходит?

-(IBAction)contactfriends:(id)sender 
    { 
    ABAddressBookRef _addressBookRef = ABAddressBookCreate(); 
    NSArray* allPeople = (__bridge NSArray *)ABAddressBookCopyArrayOfAllPeople(_addressBookRef); 

    NSMutableDictionary *contactsInformation = [[NSMutableDictionary alloc] initWithCapacity:[allPeople count]]; 
    NSMutableArray *propertyList = [[NSMutableArray alloc] init]; 

    NSLog(@"property lsit %@",propertyList); // I am getting this null 
    NSLog(@"all people %@",allPeople);  // I am getting this null 


    for (id record in allPeople) 
    { 
    CFTypeRef emailProp = ABRecordCopyValue((__bridge ABRecordRef)record, kABPersonEmailProperty); 
    NSString *email = [((__bridge NSArray *)ABMultiValueCopyArrayOfAllValues(emailProp)) objectAtIndex:0 ]; 
    if (!email) { 
     email = @""; 
    } 
    [propertyList addObject:email]; 

} 

NSLog(@"property lsit %@",propertyList);  // I am getting this null 

}

+1

Проверьте, правильно ли ваше приложение имеет разрешения для доступа к списку контактов –

+0

Как проверить, что ...? ? – 2013-03-11 11:50:29

+0

Пройдите в приложение настроек, и на этой вкладке появится вкладка «Конфиденциальность», выберите «Контакты» и проверьте, включено ли это для вашего приложения, или нет. –

ответ

3

Попробуйте это:

ABAddressBookRef addressBook = ABAddressBookCreate(); 
    NSArray *people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 
    for(id person in people){ 
      ABMultiValueRef multiemail = ABRecordCopyValue(person, kABPersonEmailProperty); 
      for (CFIndex j=0; j < ABMultiValueGetCount(multiemail); j++) { 
        NSString* email = (NSString*)ABMultiValueCopyValueAtIndex(multiemail, j); 
        [arrAllEmail addObject:email]; 
        NSLog(@"%@",email); 
        [email release]; 
      } 
    } 
2

Если вы используете iOS6, то вам необходимо проверить разрешение на доступ к аккаунтам программно.

вы можете проверить разрешение в вашем коде, как этот

// Request authorization to Address Book 
    ABAddressBookRef addressBookRef = ABAddressBookCreateWithOptions(NULL, NULL); 

    if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusNotDetermined) { 
    ABAddressBookRequestAccessWithCompletion(addressBookRef, ^(bool granted, CFErrorRef error) { 
     // First time access has been granted, add the contact 
     // add your contacts or get emails 
    }); 
    } 
    else if (ABAddressBookGetAuthorizationStatus() == kABAuthorizationStatusAuthorized) { 
    // The user has previously given access, add the contact 
    // add your contacts or get emails 
    } 
    else { 
    // The user has previously denied access 
    UIAlertView *alert =[[UIAlertView alloc]initWithTitle:@"Error" message:@"permission denied " delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
[alert show]; 
    } 
Смежные вопросы