2012-05-08 51 views
1

我想每个过滤用户输入字符时使用搜索栏搜索联系人地址簿时。这适用于普通字符,但是当输入符号像$或(对于第一个字符,ABAddressBookCopyPeopleWithName返回一个“Invalid CFArrayRef”。我搜索了一段时间的解决方案,我似乎无法找到任何东西。代码如下。iPhone - Xcode中 - 无效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); 

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

任何输入将不胜感激。

+0

没有任何人有一个想法?它是否可重现? – MDIF

回答

0

第一,当你开始搜索你应该不会触发过多OS调用。加载所有数据一次并将其存储到数组中,然后搜索。以及它之所以崩溃它的原因是因为它没有参数,所以我没有找到这样的用户名。尝试用简单的charectrsñ告诉我,这prblm仍然存在

+0

如果我输入Q作为第一个字母,它不会崩溃,尽管我没有与字母Q的联系。我的tableView被清除,如预期。它只发生在看起来象征。 – MDIF