0

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 で取得した最初の連絡先に姓名がないことです。一方、それらはネイティブの電話帳の最後のエントリです。

それで、電話帳の順序を取得するには、どの並べ替えを指定する必要があるかを尋ねます。

ありがとう、ベンキー

4

1 に答える 1

0

削除することもできますが、この回答は、iOS での連絡先の並べ替えの難しさと何が起こるかを解決する可能性があります。

  1. プログラマーには、指定できるオプションとして名と姓が提供されます (優先順位も同様です)。
  2. 内部的には、名と姓が利用できない場合は電話番号を使用していました。
  3. 私が推測する文字の優先レベルがあります。つまり、名前の前に が付いている連絡先が'#' or '$'一番下に来ます。
  4. 名前の接頭辞が の場合、順序を理解するのは本当に困難です'(', ')', '"', '*' etc
  5. 連絡先の作成時間も考慮されると思います。つまり、 の'('隣に配置された接頭辞を持つ連絡先を追加し')'、後で追加された の')'後に配置されたものを追加しまし'('た。優先順位をグループ化できるかどうかはわかりませんが、少し複雑でソースが近いです。
于 2013-05-10T12:34:58.990 に答える