iPhone - Xcode - 在地址簿中搜索符号时无效的 CFArrayRef



每次用户输入字符时,我都会尝试使用搜索栏过滤联系人。这适用于常规字符,但是当输入符号(如$ or (对于第一个字符)时,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);

我在第二行得到一个EXC_BAD_ACCESS,其中使用filteredContacts创建filteredContactsMutable。当我调试它时,当符号是第一个字符时,filteredContacts是一个无效的CFArrayRef。Apple创建的本机PeoplePicker允许您搜索符号作为第一个字符,所以我知道这是可能的。

任何意见将不胜感激。

首先,

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

最新更新