2011-08-26 65 views
0

我只想显示具有地址字段的联系人。根据所有数据计数,我在tableview中获得了行数。任何人都可以帮助我?如何仅显示具有地址字段的联系人

-(void)showPeoplePickerController 
{ 

    ABAddressBookRef tempAddressBook = ABAddressBookCreate(); 
    CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(tempAddressBook); 
    CFIndex nPeople = ABAddressBookGetPersonCount(tempAddressBook); 

    for(NSUInteger i=0; i<nPeople; i++) 
    { 

     ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i); 

     CFStringRef address; 
     NSDictionary *add; 
     ABMutableMultiValueRef multi = ABRecordCopyValue(ref, kABPersonAddressProperty); 
     NSLog(@" count is.. %ld",ABMultiValueGetCount(multi)); 
     if(ABMultiValueGetCount(multi)==0) 
     { 
      ABAddressBookRemoveRecord(tempAddressBook, ref, NULL); 

     } 
     for (CFIndex i = 0; i < ABMultiValueGetCount(multi); i++) 
     {   
      address = ABMultiValueCopyValueAtIndex(multi, i); 
      add=(NSDictionary *)address; 
      NSLog(@"add is :- %@",add); 

     } 

    } 
    allPeople = ABAddressBookCopyArrayOfAllPeople(tempAddressBook); 
    nPeople = ABAddressBookGetPersonCount(tempAddressBook); 
    NSLog(@" No Of People ... %ld",nPeople); 
    ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController  alloc]init]; 

    picker.peoplePickerDelegate = self; 
    picker.addressBook =tempAddressBook; 
// [picker.searchDisplayController.searchResultsTableView numberOfRowsInSection:2]; 
    [self presentModalViewController:picker animated:YES]; 
    [picker release]; 
} 
+0

你正在获得所有的地址值吗? – mayuur

+0

我的问题是我可以过滤所有地址,但表视图中没有行与默认地址簿的行数相同。并且我的数据被重复。 –

+0

@PanktiPatel我有这个相同的问题。你能解决吗? – user427969

回答

2

我有完全相同的问题。我终于实现了用于过滤地址簿的下面:在创建自己的UITableView呈现只是那些用户到用户所需的滤波后

// Get Copy of the address book. 
ABAddressBookRef addressBook = ABAddressBookCreate(); 
// Get all persons in addressbook 
NSArray * allPeople = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook); 
NSMutableArray * filteredPeople = [[[NSMutableArray alloc]init]autorelease]; 
int i; 
for (i = 0; i < [allPeople count]; i++) { 
    // Get the actual person 
    ABRecordRef record = [allPeople objectAtIndex:i]; 
    bool gotAddress = NO; 

    // Get the address properties. 
    ABMutableMultiValueRef multiValue = ABRecordCopyValue(record, kABPersonAddressProperty); 

    for(CFIndex j=0;j<ABMultiValueGetCount(multiValue);j++) 
    { 
     CFDictionaryRef dict = ABMultiValueCopyValueAtIndex(multiValue, j); 
     CFStringRef street = CFDictionaryGetValue(dict, kABPersonAddressStreetKey); 
     CFStringRef zip = CFDictionaryGetValue(dict, kABPersonAddressZIPKey); 
     CFStringRef city = CFDictionaryGetValue(dict, kABPersonAddressCityKey); 
     CFRelease(dict); 

     if(street != nil || zip != nil || city != nil) 
      gotAddress = YES; 
    } 

    if(gotAddress){ 
     [filteredPeopleWithAddress addObject:record]; 
    } 
} 

。我无法找到一种方法来使用ABPeoplePickerNavigationController和过滤的地址簿。 也许有一个更简单的方法,但这对我有效。

+0

感谢您的回复。 但我的问题是我可以过滤所有地址,但表视图中没有行与默认地址簿的行数相同。并且我的数据被重复。 –

+0

对不起,我不明白你的意思?! – jules

相关问题