CoreData로 관리하는 데이터를 정렬하는 버튼을 생성해보겠습니다.
아래 코드 예시 기준
- View : UITableView 기준
- trigger : UIButton
- Data : CoreData / Entity :
Item
/ property(String) :title
- 한줄설명 : 버튼을 누르면 데이터를 정렬하여 가져오도록 하며, 버튼을 누를 때마다 오름차순, 내림차순이 전환됩니다.
// ViewController.swift
import UIKit
import CoreData // CoreData 모듈 추가
class ViewController: UIViewController {
// 필요한 객체 초기화 (사용할 뷰, 데이터를 넣을 Array, CoreData Context)
let tableView = UITableView()
// 정렬된 데이터가 들어갈 Array (Entity명 Item)
let itemArray = [Item]()
// Button 초기화,
lazy var button: UIButton = {
let button = UIButton(configuration: .filled())
button.frame.origin = .init(x: view.center.x, y: view.center.y)
button.frame.size = .init(width: 100, height: 50)
button.setTitle("정렬하기", for: .normal)
button.addTarget(self, action: #selector(sortRequest), for: .touchDown)
return button
}()
// 정렬 차순 프로퍼티 (누를때마다 오름차순 / 내림차순 전환용도)
var isAcending: Bool = false
// CoreData Context
let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
// 뷰 로드 전 실행할 메소드 정의 (여기서는 정렬 메소드를 불러와보겠습니다.)
override func viewDidLoad() {
super.viewDidLoad()
view.addSubview(self.tableView)
view.addSubview(self.button)
}
// 정렬 메소드
@objc func sortRequest(_ sender: UIButton) {
// 오름차순, 내림차순 토글
self.isAcending = !self.isAcending
// 1. 데이터 요청 생성하기.
let request: NSFetchRequest<Item> = Item.fetchRequest()
// 2. 기준데이터(key) 설정 및 정렬차순(ascending) 파라미터 지정.
let sortDescriptor = NSSortDescriptor(key: "title", ascending: self.isAcending)
// 3. 1에서 요청한 Request에 2에서 설정한 정렬기준 반영
request.sortDescriptors = [sortDescriptor]
do {
itemArray = try context.fetch(request) // 정렬된 요청데이터를 itemArray에 넣기
} catch {
// 데이터 fetch 실패시 리턴되는 부분
print(data fetch error : \(error.localizedDescription)
}
// tableView 리로드하기.
self.tableView.reloadData()
}
}
만약 코드가 제대로 작동하지 않거나, 틀린 부분이 있다면 댓글 남겨주시면 수정하도록 하겠습니다.
반응형
'개발 > Swift' 카테고리의 다른 글
[Swift / 디버깅] 어떤 레이아웃의 오류인지 확인하기. UILabel:0x132f261c0.firstBaseline == UILayoutGuide:0x60000357f2c0'TitleView(0x132f12de0)'.top + 28 (0) | 2022.08.15 |
---|---|
[Swift] CoreData 특정 ID의 데이터만 가져오기 (전달하기) (0) | 2022.08.08 |
[Swift] 라이트 모드 또는 다크모드 고정하기 (0) | 2022.08.08 |
[Swift] Storyboard 없이 앱 만들기 (UIKit) (0) | 2022.08.03 |
[Swift] NS Coder로 간단한 Data 저장하기 (Data CRUD - 2) (0) | 2022.07.14 |