2차 평가과제_Memo App Project

2022. 10. 30. 22:17SeSAC/과제

앱 만들면서 어려웠던 부분 정리한다. 내용은 앱 개선하는대로 계속 추가될 예정이다.

 

#. 메모 수정

문제

수정을 위해 기존데이터를 받아오는 과정이 어려웠음. ListVC에서 선택한 셀이 가진 데이터를 넘겨줘야 했는데 realm테이블을 전달해도indexPath를 처리할 방법에서 막혔음.

 

해결방법

1) realm테이블이 아니라 애초에 인덱싱이 되어있는 레코드를 전달해서 처리(note[indexPath.row]가 note테이블의 record기 때문에 이 값을 EditorVC에 넘겨줌) 

2) ListVC-didSelectRowAt에서 indexPath.row값을 EditorVC에 넘겨준다. 그리고 EditorVC에서 realm테이블에 접근한 뒤indexPath.row값으로 인덱싱해서 처리.

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        print(print(UserDefaults.standard.object(forKey: "createMemoButtonClicked")))
        let dataView = MemoEditorView()
        try! noteLocalRealm.write {
            note[indexPath.row].editingOpened = true
        }
        MemoEditorView.memoEditingOpened = self.note[indexPath.row].editingOpened
        MemoEditorView.memoData = self.note[indexPath.row].memoTitle //텍스트뷰에 선택한 셀 memoTitle 값전달
        let vc = MemoEditorViewController()
        vc.memoDataInRealm = note[indexPath.row]
       
        //화면전환시 값전달한 VC로 화면전환(MemoEditorViewController()가 아니라 vc)
        self.navigationController?.pushViewController(vc, animated: true)
    }

 

문제

어떤 기준으로 메모 작성/수정 구분할지 고민함. 처음에는 테이블뷰에서 셀을 선택할때마다 realm데이터의 editingOpened값을 false->true로 처리하려고 했으나 텍스트뷰 초기값이 고정되어서 막힘.

 

해결방법

-. UserDefaults사용해서 메모작성버튼 클릭하면 UserDefaults가 not nil이 되고 not nil인 경우 레코드 추가 후 UserDefaults를 다시 nil로 변경했음. 그러면 createMemoButtonClicked 실행했을때 UserDefaults는 nil이기 때문에 메모작성(레코드 추가)할 수 있음.

@objc func createMemoButtonClicked() {
        let vc = MemoEditorViewController()
        MemoEditorView.memoData = ""
        
        //메모작성버튼 클릭시 ud값 초기화해서 메모 작성/수정 구분
        if UserDefaults.standard.object(forKey: "createMemoButtonClicked") == nil {
            UserDefaults.standard.set("createOrEdit", forKey: "createMemoButtonClicked")
            print(UserDefaults.standard.object(forKey: "createMemoButtonClicked")!)
        } else {
            print(#function)
        }
        self.navigationController?.pushViewController(vc, animated: true)
    }