0

私は現在voIPアプリを開発していますが、アドレス帳にこだわっています。

カスタムデザインのため、ネイティブアドレスブックは私のアプリに適合しません。また、ネイティブの名簿にはないデータを追加したいと思います。しかし、これは私が2つのセクションに分けたいくつかの問題につながります:

1.データ構造:

私のアプリのセクションで、追加情報を含むすべての名簿の連絡先をユーザーに表示する必要があります(たとえば、ユーザーが同じアプリを持っていて、それがオンラインである場合)。

現在、アドレス帳APIからすべての情報を取得し、それを配列に直接ロードしています(これには、からアクセスしますtableView:cellForRowAtIndexPath:)が、話していたカスタム情報は表示されません。すべての名簿情報をsqliteデータベース(追加情報を簡単に追加できる場所)に保存する価値があるのか​​、それともその追加情報だけをファイルなどに保存する必要があるのか​​わかりません。

それをデータベースに保存することの最大の問題は、連絡先の画像が、メモリの浪費データベースを取得するのに十分なほど重いことです。参照(ABRecordID)のみを保存してから、データベースではなくアドレスブックから関連情報を収集することを考えましたが、アドレスブックAPIのAppleドキュメントには、ABRecordIDが同じであることが保証されていないため、原因となる可能性があります。私のデータが間違った連絡先データの横に表示されます。

何か案が?

2.パフォーマンス:

このカスタムアドレスブックの2つ目の大きな問題は、たとえば、iOSのテーブルビューがAndroidのテーブルビューに比べて「手動」すぎることです。tableView:cellForRowAtIndexPath:メソッドが呼び出されたときにそのデータを返すように、データをどこかに保存する必要があります。このメソッド内にそのデータをロードすることもできますが、これにより非常に遅くなります。

ここでの問題は、メモリ内のすべてのデータをプリロードすることは危険です。これは、人が40の連絡先または2000の連絡先を持っている可能性があるためです(おそらく、それぞれの連絡先の写真を撮ったため、メモリをはるかに消費します)。iOSデバイスのメモリが不足すると、システムはアプリを強制終了します。データベースのアプローチにはメモリの問題はありませんが、表示される各セルのクエリを作成するのは非常に遅いため、受け入れられなくなります。

繰り返しますが、私はこれについてのアイデアが必要です。パフォーマンスとメモリ消費の間のトレードオフを見つけることができません。

投稿は許可されていないので、コードを要求しないでください。アドバイスをいただければ幸いです。前もって感謝します!

4

1 に答える 1

1
  1. データ構造: recordref とともに、名前の電話番号と電子メール アドレスを保存する必要があります。データストアには他に何もありません。3 つの値の 1 つが変更され、他の 2 つが同じままである場合は、変更された値を更新します。一度に多くのユーザーのデバイスの復元中にレコードリファレンスが変更される可能性がありますが、名前の電子メールと電話は変更されません。ユーザーが名前、電子メール、または電話を変更すると、多くのユーザーで一度に変更できます。ときどき、電子メールや電話と一致しないレコード参照が表示されることがあります。たとえば、連絡先の雇用主が変わった可能性があるため、近似一致のリストを表示し、ユーザーに 1 つを選択するように依頼します。

何千もの連絡先がある限り、ページングを使用します。一度に 100 または 200 を配列にロードし、現在の行を配列インデックスの中央としてテーブル ビューに表示します。ユーザーが 20 ~ 30 レコードをスクロールすると、アドレス帳から配列内のレコードが更新されます。コレクションを比較して最新の状態に保つためだけに、データの再保存に多くの時間を費やすことになります。ユーザー画像をメモリに保持しない限り、かなりの数のレコードを保存できるはずです。そのためには、テーブルビューで処理できるようにする必要があります。セルが表示されようとしているという通知を受け取ったら、画像を取得してセルに割り当てます。それでも、画像をロードする前に少し待ってください。ユーザーが速くスクロールすると、セルが飛んでしまい、セルがスクロールアウトしたことが通知され、画像データを解放できます。ユーザーがゆっくりとスクロールしている場合、短い待ち時間/スリープが経過し、各セルに画像が表示されます。

連絡先をラップするアプリに保存する予定のメタの量はわかりませんが、連絡先オブジェクト用に 2 つのテーブルを作成する必要がある場合、1 つには 3 ~ 4 個のインデックス付きの列があり、クエリを高速化でき、もう 1 つは残りを保持できます。ユーザーが連絡先を詳細ビューで表示している場合にのみロードされます。iPadを使用していない限り、テーブルビューセルにあまり入り込むことはできません。

それが役立つことを願っています。

于 2012-07-20T13:46:44.467 に答える