Как обрабатывать несколько свойств в адресной книге iPhone? - PullRequest
0 голосов
/ 06 июля 2010

Проблема в том, что я всегда получаю сбои во время выполнения при любом методе, вызываемом в переменной phones. В этой версии я получаю сообщение об ошибке 1 (ABMultiValueCopyValueAtIndex). Если я прокомментирую эту строку, код падает на 2 (ABMultiValueGetCount). Похоже, собственность была пуста. Если я NSLog переменная phones. Я получаю (null). Я тестирую код на iPhone Simulator, у меня есть несколько фиктивных контактов с некоторыми номерами телефонов. Также firstName и lastName работают как шарм.

for(id person in people){
    NSString *firstName = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
    NSString *lastName = (NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty);
    ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty);
    NSString *phone = (NSString*)ABMultiValueCopyValueAtIndex(phones, 0); /*1*/
/*2/  id ph, phLb;
    for (CFIndex i = 0; i < ABMultiValueGetCount(phones); i++) {  
        phLb = ABMultiValueCopyLabelAtIndex(phones, i);
        ph = ABMultiValueCopyValueAtIndex(phones, i);
        NSLog(@"%@,%@", phLb, ph);
        CFRelease(phLb);
        CFRelease(ph);
    }
*/  
NSLog(@"%@", firstName);
NSLog(@"%@", lastName);
NSLog(@"%@", phones);
NSLog(@"%@", phone);

[firstName release];
[lastName release];
[phone release];
[phones release];

}

Ответы [ 3 ]

0 голосов
/ 07 июля 2010

Я думаю, что ваши предположения о том, как получить ABMultiValueRef, неверны.У меня нет этого кода AB под рукой на этом компьютере, но убедитесь, что ABRecordCopyValue является подходящим методом.А затем проведите исследование ABMultiValueRef о том, как получить доступ к его содержимому.Это совершенно другой набор объектов, чем простые строки.

0 голосов
/ 07 июля 2010

код:

addressBook = ABAddressBookCreate();
people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
CFRelease(addressBook);

освободил адресную книгу, и все объекты, на которые она ссылалась, были освобождены. Таким образом, указатели на MultiValueRefs были освобождены перед использованием.

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

Научитесь пользоваться отладчиком.Кроме того, ваш код утечки.

...