Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- lazy var list: [NSManagedObject] = {
- return self.fetch()
- }()
- //데이터를 읽어올 메소드
- func fetch() -> [NSManagedObject] {
- //1 앱 델리게이트 객체 참조
- let appDelegate = UIApplication.shared.delegate as! AppDelegate
- //2 관리 객체 컨텍스트 참조
- let context = appDelegate.persistentContainer.viewContext
- //3 요청 객체 생성
- let fetchRequest = NSFetchRequest<NSManagedObject>(entityName: "Board")
- //3-1 정렬 속성 설정
- let sort = NSSortDescriptor(key: "regdate", ascending: false)
- fetchRequest.sortDescriptors = [sort]
- //4 데이터 가져오기
- let result = try! context.fetch(fetchRequest)
- return result
- }
- //데이터를 저장할 메소드
- func save(title: String, contents: String) -> Bool {
- //1 앱 델리게이트 객체 참조
- let appDelegate = UIApplication.shared.delegate as! AppDelegate
- //2 관리 객체 컨텍스트 참조
- let context = appDelegate.persistentContainer.viewContext
- //3 관리 객체 생성 & 값을 설정
- let object = NSEntityDescription.insertNewObject(forEntityName: "Board", into: context)
- object.setValue(title, forKey: "title")
- object.setValue(contents, forKey: "contents")
- object.setValue(Date(), forKey: "regdate")
- //4 영구 저장소에 커밋되고 나면 list 프로퍼팅 추가한다.
- do {
- try context.save()
- //self.list.append(object)
- self.list.insert(object, at: 0)
- return true
- } catch {
- context.rollback()
- return false
- }
- }
- //화면 및 로직 초기화 메소드
- override func viewDidLoad() {
- let addBtn = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(add(_:)))
- self.navigationItem.rightBarButtonItem = addBtn
- }
- //데이터 저장 버튼에 대한 액션 메소드
- @objc func add(_ sender: Any) {
- let alert = UIAlertController(title: "게시글 등록", message: nil, preferredStyle: .alert)
- //입력 필드 추가(이름 & 전화번호)
- alert.addTextField() {$0.placeholder = "제목"}
- alert.addTextField() {$0.placeholder = "내용"}
- //버튼 추가 (cancel & save)
- alert.addAction(UIAlertAction(title: "Cancel", style: .cancel))
- alert.addAction(UIAlertAction(title: "Save", style: .default) {(_) in
- guard let title = alert.textFields?.first?.text, let contents = alert.textFields?.last?.text else {
- return
- }
- //값을 저장하고 성공이면 테이블 뷰를 리로드한다.
- if self.save(title: title, contents: contents) == true {
- self.tableView.reloadData()
- }
- })
- self.present(alert, animated: false)
- }
- func delete(object: NSManagedObject) -> Bool {
- //1 앱 델리게이트 객체 참조
- let appDelegate = UIApplication.shared.delegate as! AppDelegate
- //2 관리 객체 컨텍스트 참조
- let context = appDelegate.persistentContainer.viewContext
- //3 컨텍스트로부터 해당 객체 삭제
- context.delete(object)
- //4 영구저장소에 커밋한다.
- do {
- try context.save()
- return true
- } catch {
- context.rollback()
- return false
- }
- }
- //데이터 수정 처리를 담당할 edit메소드 구현
- func edit(object: NSManagedObject, title: String, contents: String) -> Bool {
- //1 앱 델리게이트 객체 참조
- let appDelegate = UIApplication.shared.delegate as! AppDelegate
- //2 관리 객체 컨텍스트 참조
- let context = appDelegate.persistentContainer.viewContext
- //3 관리 객체의 값을 수정
- object.setValue(title, forKey: "title")
- object.setValue(contents, forKey: "contents")
- object.setValue(Date(), forKey: "regdate")
- //영구 저장소에 반영한다.
- do {
- try context.save()
- self.list = self.fetch()
- return true
- } catch {
- context.rollback()
- return false
- }
- }
Add Comment
Please, Sign In to add comment