1

ユーザーが文字を入力するたびに、検索バーを使用して連絡先をフィルタリングしようとしています。これは通常の文字には問題なく機能しますが、最初の文字に $ や ( などの記号を入力すると、ABAddressBookCopyPeopleWithName は「無効な CFArrayRef」を返します。解決策をしばらく検索しましたが、何も見つからないようです。コードは以下です。

    CFArrayRef filteredContacts = ABAddressBookCopyPeopleWithName(addressBook, (CFStringRef)searchText);
    CFMutableArrayRef filteredContactsMutable = CFArrayCreateMutableCopy(kCFAllocatorDefault, CFArrayGetCount(filteredContacts), filteredContacts);
    CFArraySortValues(filteredContactsMutable, CFRangeMake(0, CFArrayGetCount(filteredContactsMutable)), (CFComparatorFunction)ABPersonComparePeopleByName, (void*)sortOrdering);
    contacts = (NSArray *)filteredContactsMutable;
    CFRelease(filteredContacts);

私は、filteredContactsMutable がfilteredContacts を使用して作成された 2 行目に EXC_BAD_ACCESS を取得します。デバッグすると、シンボルが最初の文字の場合、filteredContacts は無効な CFArrayRef になります。Apple が作成したネイティブの PeoplePicker を使用すると、最初の文字として記号を検索できるので、それが可能であることはわかっています。

任意の入力をいただければ幸いです。

4

1 に答える 1

0

まず、検索を開始するときに OS 呼び出しをトリガーしすぎないようにする必要があります。すべてのデータを一度ロードし、それを配列に格納してから検索します。そして、nil引数が原因でクラッシュする理由は、そのようなユーザー名が見つからないと思います。単純な文字で試してくださいnこのprblmがまだ存在するかどうか教えてください

于 2012-05-08T14:42:52.043 に答える