0

アドレス帳(ABAddressBook)を作成し、配列内のすべての人をコピーしてから、レコード参照(ABRecordRef)を作成し、次のように NSData を使用してその画像データをコピーできることは誰もが知っているとおりです。

ABAddressBookRef addressBook = ABAddressBookCreate( );
CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople( addressBook );
ABRecordRef recordReference = CFArrayGetValueAtIndex(allPeople, addressIndex);
NSData *imageData = (NSData *)ABPersonCopyImageData(recordReference);

これは、普遍的な事実であると予想されるように正常に機能しますが、私の場合 (アプリケーション) には、ユーザーが最初に連絡先を保存し、画像を追加/アップロードしないと、小さな問題があります。その連絡先から画像データにアクセスしている場合、空の画像があるため、デフォルトの画像を指定または割り当てます。しかし、ユーザーが後で連絡先の画像をアップロードするか、連絡先の既存の画像を変更すると、更新された画像が期待どおりに表示されないため、アドレス帳の名前やインデックスなどに頼ることはできません.

したがって、一意の連絡先 ID を保存し、その ID に基づいて連絡先画像を取得するというアイデアを思いつきました。その過程で、一意の連絡先 ID をデータベースに保存しました。次に、モデル クラスを使用して ID 値を保持します。次に、そのモデル クラスを配列に保存します。

これは、理解するためのサンプル コードです。

ReminderClass *reminderToDisplay = [self.remindersArray objectAtIndex:indexPath.row];
NSString *contactIDString = reminderToDisplay.contactID;
int addressIndex = [contactIDString integerValue];

ここで、ABRecordRef のインスタンスを作成してその画像データをコピーできるという事実を認識していますが、その構文は次のようになります。

ABRecordRef personID = CFArrayGetValueAtIndex(CFArrayRef theArray, CFIndex idx);

CFIndex idxの代わりにaddressIndexを割り当てることができる方法

しかし、すべてのIDの詳細を保持するNSMutableArray、つまりremindersArrayがあるため、配列部分、つまりCFArrayRefに感銘を受けました

これで、 NSMutableArrayからCFArrayRefへの型キャスト メソッドを検索しました。

しかし、その逆の質問がいくつか見つかりました。サンプルの質問はこちらで見ることができます

それぞれの連絡先の適切な画像にアクセスできるように、これを乗り越える方法があれば教えてください。どんな助けも大歓迎です!

よろしくお願いします:)

4

1 に答える 1

0

以下のリンクからMr.HRMによる最良の解決策を見つけてください。

http://www.stackoverflow.com/questions/15138946/access-contact-image-from-address-book-based-on-name

これは間違いなくあなたを正しい方法で助けるでしょう、ありがとう:)

于 2013-03-12T11:27:15.560 に答える