3

変更日に従って並べ替えられたすべてのアドレス帳の連絡先を取得するにはどうすればよいですか? つまり、最新の更新日を持つ連絡先は、リストの前に来る必要があります。

4

2 に答える 2

3

ABPerson の変更日に従って直接ソートする方法がないため、ここではうまくいくと思います

- (NSArray *) getSortedContacts
{

    NSMutableArray * modificationDates = [[NSMutableArray alloc] init];
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    ABAddressBookRef addressBook = ABAddressBookCreate();
    if(addressBook != nil)
    {
        CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
        if(nPeople > 0)
        {
            CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook);
            for (int index = 0; index < nPeople; ++index)
            {
                ABRecordRef person = CFArrayGetValueAtIndex(allPeople, index);
                NSNumber *contactID = [NSNumber numberWithInt:ABRecordGetRecordID(person)];
                NSDate *modificationDate = (NSDate*) ABRecordCopyValue(person, kABPersonModificationDateProperty);
                [modificationDates addObject:[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:contactID,modificationDate, nil] forKeys:[NSArray arrayWithObjects:@"contactID",@"modificationDate", nil]]];
            }
            if(allPeople)
                CFRelease(allPeople);
            allPeople = nil;
        }
    }
    [pool drain];

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"modificationDate" ascending:TRUE];
    [modificationDates sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

    return modificationDates;
}

ソートされた配列を取得したら、配列から辞書を取得し、contactID を使用して、これを使用して ABPerson オブジェクトを取得します。

ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressbook, (ABRecordID) [[dict valueForKey:@"contactID"] intValue]);

これがあなたを助けることを願っています

于 2013-08-29T08:15:58.713 に答える
0

kABPersonModificationDatePropertyABPerson レコードのプロパティを使用します。

CFDateRef modDate = ABRecordCopyValue(record, kABPersonModificationDateProperty);

変更された日付を提供します。

于 2013-08-29T07:18:26.003 に答える