Получение содержимого адресной книги iPhone без графического интерфейса - PullRequest
3 голосов
/ 06 июля 2010

Я хотел бы перечислить все телефонные номера (или любое другое поле) людей в адресной книге.

Я написал следующий код:

- (void)addressBookFill{
    ABAddressBookRef addressBook = ABAddressBookCreate();
    people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
    [addressBook release];
}

- (void)printAddressBook{
    for(id person in people){
        NSLog(@"%@", [person class]);
        NSLog(@"\t%@", person );
    }
}

Когда я вызываю метод printAddressBook, я получаю это на своей консоли:

2010-07-06 10:34:11.998 app[91420:207] __NSCFType
2010-07-06 10:34:11.999 app[91420:207]  <CPRecord: 0x5d56ce0 ABPerson>

И я понятия не имею, как разыменовать этот объект ABPerson, как получить от него какую-либо информацию.

Я пытался:

firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty);

но у меня есть некоторые исключения.

Может кто-нибудь сказать мне, как получить некоторую информацию от этих объектов?

Ответы [ 3 ]

2 голосов
/ 06 июля 2010

Прочтите документацию о классе ABPerson:http://developer.apple.com/mac/library/documentation/UserExperience/Reference/AddressBook/Classes/ABPerson_Class/Reference/Reference.html

, а также класс ABRecord:

http://developer.apple.com/mac/library/documentation/UserExperience/Reference/AddressBook/Classes/ABRecord_Class/Reference/Reference.html#//apple_ref/occ/cl/ABRecord

[ person valueForProperty: @"propName" ]

Доступные свойства можно получить с помощью:

[ ABPerson properties ]

[EDIT]

На iPhone вы можете использовать следующий код для доступа к значению:

NSString * lastName = (NSString *)ABRecordCopyValue( person, kABPersonLastNameProperty );
1 голос
/ 04 апреля 2012

Вы хотите получить только тех контактов, которые имеют электронную почту на моем контакте, поэтому используйте этот код для iOS5

Пожалуйста, нравится, если это работает

Первое добавление AddressBook.framework и #import <AddressBook/AddressBook.h>

 - (NSArray*)printAddressBook{
        NSMutableArray *mutableData = [NSMutableArray new];
        ABAddressBookRef addressBook = ABAddressBookCreate();
        NSArray *arrayOfAllPeople = (__bridge_transfer NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
        NSUInteger peopleCounter = 0; 
        for (peopleCounter = 0;peopleCounter < [arrayOfAllPeople count]; peopleCounter++){
            ABRecordRef thisPerson = (__bridge ABRecordRef) [arrayOfAllPeople objectAtIndex:peopleCounter];
            NSString *name = (__bridge_transfer NSString *) ABRecordCopyCompositeName(thisPerson);
            NSLog(@"First Name = %@", name);  

            ABMultiValueRef emails = ABRecordCopyValue(thisPerson, kABPersonEmailProperty);

            for (NSUInteger emailCounter = 0; emailCounter < ABMultiValueGetCount(emails); emailCounter++){
                /* And then get the email address itself */ 
                NSString *email = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(emails, emailCounter);
                NSLog(@"Email : %@",email);
                NSMutableDictionary *personDict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:name,@"name",email,@"email", nil];
                [mutableData addObject:personDict];
            }
        } 
        CFRelease(addressBook);
       return [NSArray arrayWithArray:mutableData];
    }
1 голос
/ 04 апреля 2012

Может быть, этот код поможет вам для iOS5, пожалуйста, нравится

ABAddressBookRef addressBook = ABAddressBookCreate();
    NSArray *arrayOfAllPeople = (__bridge_transfer NSArray *) ABAddressBookCopyArrayOfAllPeople(addressBook);
    NSUInteger peopleCounter = 0; 
    for (peopleCounter = 0;peopleCounter < [arrayOfAllPeople count]; peopleCounter++){
        ABRecordRef thisPerson = (__bridge ABRecordRef) [arrayOfAllPeople objectAtIndex:peopleCounter];
        NSString *name = (__bridge_transfer NSString *) ABRecordCopyCompositeName(thisPerson);
        NSLog(@"First Name = %@", name);  

        ABMultiValueRef emails = ABRecordCopyValue(thisPerson, kABPersonEmailProperty);

        for (NSUInteger emailCounter = 0; emailCounter < ABMultiValueGetCount(emails); emailCounter++){
            /* And then get the email address itself */ 
            NSString *email = (__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(emails, emailCounter);
            NSLog(@"Email : %@",email);
        }
    } 
    CFRelease(addressBook);
...