1 つのアプリの連絡先操作に取り組んでいます。私の要件は、ネイティブの phoneBook と同じ順序を維持することです。ネイティブになんらかの変更があった場合、順序指定のあるフィールドによる 1 つのフェッチで、存在する場所または挿入する場所を直接知る必要があります。
ネイティブの phoneBook に ABPersonComparePeopleByName の順序付けを適用しました。最初に名前、次に姓、最後に電話番号でソートすることがわかりました。連絡先に名前がない場合は、名前のある連絡先が最初に表示されます。
ABAddressBookRef addressBook = ABAddressBookCreate();
CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
CFMutableArrayRef peopleMutable = CFArrayCreateMutableCopy(
kCFAllocatorDefault,
CFArrayGetCount(people),
people
);
CFArraySortValues(
peopleMutable,
CFRangeMake(0, CFArrayGetCount(peopleMutable)),
(CFComparatorFunction) ABPersonComparePeopleByName,
(void*) ABPersonGetSortOrdering()
);
ローカル phoneBook で、与える
NSFetchRequest* contactReq = [[NSFetchRequest alloc] init];
[contactReq setSortDescriptors:[NSArray arrayWithObjects:[NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES selector:@selector(caseInsensitiveCompare:)],[NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:YES selector:@selector(caseInsensitiveCompare:)],[NSSortDescriptor sortDescriptorWithKey:@"phoneNumber" ascending:YES selector:@selector(caseInsensitiveCompare:)], nil]];
問題は、ローカル phoneBook で取得した最初の連絡先に姓名がないことです。一方、それらはネイティブの電話帳の最後のエントリです。
それで、電話帳の順序を取得するには、どの並べ替えを指定する必要があるかを尋ねます。
ありがとう、ベンキー