Вопрос относительно поручения по созданию UITableView из адресной книги iPhone
У меня вопрос по поводу AddressBook Framework для iOS. Ситуация выглядит следующим образом:
Я пытаюсь восстановить вид контактов из приложения телефона, но хочу показать номера телефонов контакта в том же виде. Таким образом, если у контакта более одного номера, его имя будет в TableView несколько раз, каждый раз с другим номером.
Я пытаюсь добиться этого, извлекая всю информацию, которая мне нужна, когда загружается представление, и после этого заполняю TableView соответствующими значениями из NSArray, состоящего из NSDictionaries, содержащих информацию о контакте.
Это прекрасно работает, за исключением одного... Номера телефонов и метки контакта правильно прочитаны и сохранены в словаре, но когда я их прочитаю позже, они, похоже, исчезли.
Вот мой код для создания NSDictionaries, держу пари, что это какая-то ошибка управления памятью или что-то совершенно глупое. Я надеюсь, что любой может помочь мне, большое спасибо заранее!
persons = [[NSMutableArray alloc] init];
ABAddressBookRef addressBook = ABAddressBookCreate();
ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
NSArray *people = (NSArray *)ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByLastName);
for (id record in people)
{
ABMultiValueRef numbers = ABRecordCopyValue((ABRecordRef)record, kABPersonPhoneProperty);
for (CFIndex i = 0; i < ABMultiValueGetCount(numbers); ++i) {
CFStringRef label = ABAddressBookCopyLocalizedLabel(ABMultiValueCopyLabelAtIndex(numbers, i));
CFStringRef number = ABMultiValueCopyValueAtIndex(numbers, i);
CFStringRef firstNameRef = ABRecordCopyValue((ABRecordRef)record, kABPersonFirstNameProperty);
CFStringRef lastNameRef = ABRecordCopyValue((ABRecordRef)record, kABPersonLastNameProperty);
CFDataRef imageDataRef = ABPersonCopyImageDataWithFormat((ABRecordRef)record, kABPersonImageFormatThumbnail);
NSString *firstName = [NSString stringWithFormat:@"%@", firstNameRef];
NSString *lastName = [NSString stringWithFormat:@"%@", lastNameRef];
NSString *pLabel = [[NSString alloc] initWithFormat:@"%@", label];
NSString *pNumber = [NSString stringWithFormat:@"%@", number];
UIImage *image = [UIImage imageWithData:(NSData*)imageDataRef];
NSDictionary *personDict = [NSDictionary dictionaryWithObjectsAndKeys:firstName, @"firstName", lastName, @"lastName", image, @"image", pNumber, @"phoneNumber", pLabel, @"label", nil];
NSLog(@"In %@ - %@", pLabel, pNumber);
[persons addObject:personDict];
CFRelease(firstNameRef);
CFRelease(lastNameRef);
//CFRelease(imageDataRef);
CFRelease(label);
CFRelease(number);
}
}
CFRelease(addressBook);
CFRelease(source);
[people release];
1 ответ
Наконец-то смог решить это сам. По-видимому, я добавлял ноль изображений в словари, которые они не могли обработать.