2

に似たビューを実装するとABPeoplePickerNavigationController、リストをすばやく並べ替えることができません。ネイティブの連絡先アプリは、リストを即座に読み込みます。4000 件以上の連絡先を扱っているため、読み込み時間を短縮することが重要です。ABPeoplePickerNavigationController多くのカスタム UI 作業を行う必要があるため、 を使用できません。

を使用してから、 sectionForObject を使用しABAddressBookCopyArrayOfAllPeopleて人々をセクションに配置し、次に を使用してセクションを並べ替えていました。4000 件の連絡先の場合、私の時間は約 8 秒でした。UILocalizedIndexedCollationsortedArrayFromArray

ABAddressBookCopyArrayOfAllSources次に、すべてのソースに対して andを使用するように切り替え、ABAddressBookCopyArrayOfAllPeopleInSourceWithSortOrdering各ソースの連絡先をソートされていない配列に追加するだけで、同じUILocalizedIndexedCollation手法を使用しました。これにより、時間が約 5 秒に短縮されました。これは、セクションが既にほとんどソートされているためだと思います。

これを改善する方法はありますか?私が知らないテクニックはありますか?ABPeoplePickerNavigationControllerビューなしでデータ ソースを読み込んで使用することはできますか? または、より高速なソート方法はありますか?

どうもありがとう。

4

2 に答える 2

0

Is there any way to improve on this?

It may help to realize that you'll never need to display 4000 names immediately. All you really need is the names for whatever section the user is looking at, and you can probably find and sort those names much more quickly. Let's say the user is viewing the A section initially, so maybe you use a predicate to pick out names starting with A. Out of 4000 names, perhaps 400 start with A, and that'll cut your sorting time down to a fraction of a second. You can continue fetching and sorting sections in the background.

The point is that it doesn't really matter how long it takes to sort all the records. What matters is how long it takes to put the records that the user wants on the screen.

于 2013-06-02T02:21:32.513 に答える