2011-03-13 61 views
0

我有一个关于iOS地址簿框架的问题。情况如下:关于从iPhone地址簿创建UITableView差事问题

我试图从手机应用程序重新创建联系人视图,但我想在同一视图中显示联系人的电话号码。所以如果一个联系人有多个号码,他的名字将会多次出现在TableView中,每次使用不同的号码。

我想通过提取视图加载时需要的所有信息来完成该操作,之后,使用包含联系人信息的NSDictionaries组成的NSArray中的适当值填充TableView。

这个工程除了一件事伟大的...联系人的PHONENUMBERS和标签被正确读取并存储在字典中,但是当我后来读出来,他们似乎已经消失了。

这里是我的代码生成的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]; 
+0

当我尝试在设备上进行调试时,我自己有一种解决方案。看起来这种行为只在模拟器中很明显。在我的iPhone上它主要工作,但不适用于所有联系人。 – BenniBrightside 2011-03-13 17:16:06

回答

0

终于可以自己解决这个问题了。显然,我在他们无法处理的字典中添加了一些无图像。

+0

当我拿出在那里我得到它完美的作品,因为它应该在地址簿中的图像信息行......我还寻找到它。 – BenniBrightside 2011-03-13 17:29:16