每次用户输入字符时,我都会尝试使用搜索栏过滤联系人。这适用于常规字符,但是当输入像 $ 或 ( 对于第一个字符这样的符号时,ABAddressBookCopyPeopleWithName 返回一个“Invalid 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);
我在第二行得到一个 EXC_BAD_ACCESS,在该行中,filteredContactsMutable 是使用filteredContacts 创建的。当我调试它时,当符号是第一个字符时,filteredContacts 是一个 Invalid CFArrayRef。Apple 创建的本机 PeoplePicker 允许您搜索符号作为第一个字符,所以我知道这是可能的。
任何输入将不胜感激。