반응형
1. UISearchBar delegate 설정
2. searchbar.delegate = self (서치바를 ctrl + 해당하는 viewcontroller에 끌어다 놓기)
3. delegate메서드 추가하기
4. context에 요청 (NSFetchRequest 사용)
let request: NSFetchRequest<Item> = Item.fetchRequest()
반응형
5. 쿼리에 태그 달기 (NSPredicate 사용)
let predicate = NSPredicate(format: "title CONTAINS[cd] %@", searchBar.text!)
request.predicate = predicate
predicate는 서술부 혹은 근거를 두다, 단정하다 정도로 해석되는데
NSPredicate는 아마 ~에 근거에서 쿼리하는 정도가 맞는 듯하다..
%@ (%at)
는 전달하려는 모든 종류의 인수를 대체할 수 있다.
cd는 c는 case의 약자고 d는 diacritic의 약자인데
[cd]를 넣는 이유는
대/소문자 구별과 발음 구별 부호를 무시?(둔하게?)하게 하는 명령이다
즉 'ÇHÂŚŠÏ 같은 단어를 찾을 때 chassi만으로도 검색이 가능하게 해주는 기능..
format은 당연히 입력인데
args는 매개변수로 값을 넘겨주는 실제의 값이다
arg의 실제값이 %@로 대체된다.
그러므로 quary를 해석해보면 array에서 title에 검색한 값이 포함된 것을 찾아라가 된다.
6. DB에서 가져온 data 정렬하기 (NSSortDescriptor 사용)
let sortDescriptor = NSSortDescriptor(key: "title", ascending: true)
request.sortDescriptors = [sortDescriptor]
do {
itemArray = try context.fetch(request)
} catch {
print("error fetching data from context \(error)")
}
tableView.reloadData()
}
그 이후 context로 가져온 요청을 다시 itemArray에 할당하고 가져오는 작업
최종
//1.
extension TodoListViewController: UISearchBarDelegate {
//3.
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
//4.
let request: NSFetchRequest<Item> = Item.fetchRequest()
//5.
request.predicate = NSPredicate(format: "title CONTAINS[cd] %@", searchBar.text!)
//6.
request.sortDescriptors = [NSSortDescriptor(key: "title", ascending: true)]
do {
itemArray = try context.fetch(request)
} catch {
print("error fetching data from context \(error)")
}
tableView.reloadData()
}
}
반응형
'iOS > Swift 어플 따라하기' 카테고리의 다른 글
[Swift] Realm 맛보기.. data경로, data확인 (0) | 2022.10.18 |
---|---|
[Swift] Searchbar 탐색 이후 기존 목록으로 돌아가기 (0) | 2022.10.17 |
[Swift] Coredata로 CRUD (0) | 2022.10.14 |
[Swift] Coredata로 data 저장하고 불러오기(CRUD의 시작) (1) | 2022.10.13 |
[Swift] 프로젝트 중 CoreData 추가하기 (0) | 2022.10.11 |