ユーザーが文字を入力するたびに、検索バーを使用して連絡先をフィルタリングしようとしています。これは通常の文字には問題なく機能しますが、最初の文字に $ や ( などの記号を入力すると、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 を使用すると、最初の文字として記号を検索できるので、それが可能であることはわかっています。
任意の入力をいただければ幸いです。