- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
[displayItems removeAllObjects]; //clear array to ensure no repeat info
if ([searchText length] == 0) {
displayItems = (NSMutableArray *)allItems;
}
else {
//search by item category
NSPredicate *catPredicate = [NSPredicate predicateWithFormat:@"category
CONTAINS[cd] %@",searchText];
[searchable filterUsingPredicate:catPredicate];
//further search by item name
NSPredicate *namePredicate = [NSPredicate predicateWithFormat:@"name CONTAINS[cd]
%@",searchText];
[searchable filterUsingPredicate:namePredicate];
displayItems = searchable;
searchable = (NSMutableArray *)allItems;
}
[self.searchResults reloadData];
}
이 메서드는 더 큰 프로젝트를 만들려고하는 간단한 검색 가능한 테이블 뷰의 일부입니다. 내 코드가 컴파일되어 실행되고 검색 바에 뭔가를 입력하면 검색 기능이 작동하지만 두 번째 문자를 입력하자마자 프로그램이 중단됩니다. 두 글자를 연속으로 입력하면 'NSInvalidArgumentException'이 발생합니다. 이유 : '- [_ NSArrayI filterUsingPredicate :] : 인스턴스 0x6d6c040으로 전송 된 인식 할 수없는 선택자' '문자 하나를 입력 한 다음 Enter 키 또는 백 스페이스 키를 누르면, 이 남자는 'NSInvalidArgumentException', 이유 : '- [ _NSArrayI removeAllObjects] : 두 번째 문자를 입력 할 때 인스턴스 0x6a7f300'으로 전송 된 인식 할 수없는 선택기를 보냅니다.NSPredicate를 사용하여 개체 배열 검색
저는 객관적으로 새로운 c입니다. 그리고 이것은 저에게 당혹 스럽습니다. 내가 얻을 수있는 모든 도움은 크게 감사하겠습니다 .... : -/여전히 업데이트 이후 문제가 있습니다.
검색 가능 = (NSMutableArray *) allItems; NSArray를 NSMutableArray로 만들 수 없습니다. –
검색 가능은 NSMutableArray로 선언되고, allItems는 NSArray입니다. 모든 항목을 검색 가능한 배열에 다시 넣을 수 있도록 캐스트했습니다. 이것이 합법적인지, 아니면 그것이 당신이 의미 한 것이 었는지 나는 모른다. 실망스럽고 혼란스럽게 되다니 죄송합니다. 그러나 객관적인 -C는 새로운 영역입니다. 참고로, 나는 문제의 라인과 NSPredicate 구문이 제거 된 완전히 다른 검색 알고리즘을 시도해 보았다. 그리고 함수가 작동하지 않는 것을 제외하면 같은 문제가 발생했다. –
많은 감사합니다! NSPredicate 솔루션으로 돌아가서 addObjectsFromArray를 사용하여 캐스팅 명령문을 바꿨고 매력처럼 작동했습니다. 나는 정확히 왜 그런지 이해하지 못한다. 그러나 그것은 효과가있다. 도와 주셔서 감사합니다. –