1

每次用户输入字符时,我都会尝试使用搜索栏过滤联系人。这适用于常规字符,但是当输入像 $ 或 ( 对于第一个字符这样的符号时,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 允许您搜索符号作为第一个字符,所以我知道这是可能的。

任何输入将不胜感激。

4

1 回答 1

0

首先,开始搜索时不应触发过多的操作系统调用。一次加载所有数据并将其存储到数组中然后搜索。以及由于其中的 nil 参数而导致它崩溃的原因 cz 我认为找不到这样的用户名。尝试使用简单的字符 n 告诉我这个 prblm 是否仍然存在

于 2012-05-08T14:42:52.043 回答