2012-05-08 20 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