开发者

displaying contacts in a UItableview in phone contacts order

开发者 https://www.devze.com 2023-03-02 01:19 出处:网络
i am able to import the contacts from phone book and displaying them in a table view .but what i want to do is to display the contacts in the same order as they are in the phone book order.....

i am able to import the contacts from phone book and displaying them in a table view .but what i want to do is to display the contacts in the same order as they are in the phone book order.....

can any one please help me how to do that and my code is as follows

self.navigationController.navigationBar.tintColor = [UIColor grayColor];
    self.title = @"iPhone Contacts";
    [super viewDidLoad];
    wantedname= [[NSMutableArray alloc] init];
    wantednumber= [[NSMutableArray alloc] init];
    ABAddressBookRef addressBook = ABAddressBookCreate();
    NSArray *thePeople = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

    NSString *name;
    for (id person in thePeople)
    {
        name = (NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty);
        NSLog(@"!!!!!! name ---> %@",name);
        ABMultiValueRef multi = ABRecordCopyValue(person, kABPersonPhoneProperty);
        int count1=ABMultiValueGetCount(multi);
        NSLog(@"%d",count1);
        if ([name length]>0 && count1!=0) 
        {
                    NSString *beforenumber = (NSString *)ABMultiValueCopyValueAtIndex(multi, 0);
            NSLog(@" contacts:%@",beforenumber );
            NSString* removed1=[beforenumber stringByReplacingOccurrencesOfString:@"-"withString:@""];
            NSString* removed2=[removed1 stringByReplacingOccurrencesOfString:@")"withString:@""];
            NSString* removed3=[removed2 stringByReplacingOccurrencesOfString:@" "withString:@""];
            NSString* removed4=[removed3 stringByReplacingOccurrencesOfString:@"("withString:@""];
            NSString* removed5=[removed4 stringByReplacingOccurrencesOfString:@"+"withString:@""];
            [wantedname addObject:name];
            [wantednumber addObject:removed5];
           // CFRelease(beforenumber);
            [beforenumber release];
            //CFRelease(开发者_运维技巧name);

        }
        //CFRelease(name);
        [name release];
        CFRelease(multi);
    }

    CFRelease(addressBook);
    CFRelease(thePeople);

    contactstable.delegate = self;
    contactstable.dataSource = self;


Instead of:

NSArray *thePeople = (NSArray *)ABAddressBookCopyArrayOfAllPeople(addressBook);

You might try:

ABRecordRef source = ABAddressBookCopyDefaultSource(addressBook);
NSArray *thePeople = (NSArray*)ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering(addressBook, source, kABPersonSortByLastName);


This is how I did it. Hope it helps. :)

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error);

CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFMutableArrayRef allPeopleMutable = CFArrayCreateMutableCopy(kCFAllocatorDefault, CFArrayGetCount(allPeople), allPeople);
CFArraySortValues(allPeopleMutable, CFRangeMake(0, CFArrayGetCount(allPeopleMutable)), (CFComparatorFunction)ABPersonComparePeopleByName, kABPersonSortByFirstName);
0

精彩评论

暂无评论...
验证码 换一张
取 消