6

GroupMeContactsTableViewControllerのようなものを作りたいです。すべてのアドレス帳の連絡先と、どの連絡先がGroupMeユーザーであるかが表示されます。

ここに画像の説明を入力してください

ABPeoplePickerNavigationControllerはカスタマイズできないようです。

  1. ABAddressBookしたがって、 &を使用して名簿の連絡先にアクセスする場合ABPerson、カスタムでそれらを表示するための最良の方法は何UITableViewControllerですか?

    すべての名簿の連絡先をにロードするだけNSArrayでは、メモリが失われる可能性があります(電話に何千もの名簿の連絡先がある人を知っています)。私はコアデータを使用することに慣れてNSFetchedResultsControllerおり、このような大規模な結果セットに使用しています。ただし、そのためにはABPerson、Core Dataでモデルを作成する必要があります。これは簡単ですが、アドレス帳との同期を維持することは困難で、ちょっとばかげているようです。

  2. GroupMeの連絡先をアドレスブックの連絡先に関連付ける/リンクするための最良の方法は何ですか?

  3. このGroupMeスタイルのインターフェイスを再作成するときに知っておくべき/考慮すべきことは他にありますか?

4

1 に答える 1

18

私はGroupMeiOS開発者の1人であり、これが私たちの仕事です。

  1. ユーザーの名簿をスキャンしてCoreDataに保存します。電話番号に対して1対多、電子メールアドレスに対して1対多のContactオブジェクトがあります。連絡先が多い場合、最初のスキャンには少し時間がかかることがありますが、後続の各スキャンでは、最後のスキャンABRecordRefの前にあるものはすべて無視されます。kABPersonModificationDatePropertyこれにより、更新が大幅に高速化されます。

  2. 次に、ユーザーが連絡先の同期を選択したと仮定して、既存のGroupMeユーザーと照合する電話番号と電子メールアドレスをサーバーにアップロードします。

  3. 最後に、一致に基づいてGroupMe関係をプルし(電話、電子メール、Facebook、Twitterから)、それらもCoreDataに保存します。ユーザーのアドレスブックにすでに存在する電話/電子メールが原因で関係が作成された場合、それらの値を関係に戻し、GroupMe関係とCoreDataに保存した連絡先との間に1対1の関係を作成できるようにします。ステップ1.このようにして、ローカル連絡先またはGroupMeリレーションシップのを簡単に作成NSFetchRequestし、それらのリレーションシップの詳細をいつでも利用できるようにすることができます(したがって、ローカル連絡先がGroupMeユーザーなどであることを示すことができます-スクリーンショットのAaron G.のように)

も使用してNSFetchedResultsControllerいるため、バックグラウンド操作で新しい連絡先/関係が見つかった場合に、更新をUIに反映させることができます。

他の唯一のヒントは、フェッチ要求がすべての関係をプリフェッチしていることを確認することです。これにより、スクロールして障害を設定するときに、関係の理由をロードしてもコアデータがヒットしません。

そうです、Core Dataをユーザーのアドレス帳と同期させるのはばかげているよりも面倒ですが、それに簡単にアクセスでき、ジャズをすべて知る必要のあるクエリに対応できるので、それだけの価値があります。

于 2011-11-07T14:31:45.783 に答える