ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • iOS - memo 앱 만들기 # 11 DB구현2
    iOS 2020. 12. 16. 11:38

    DB구현2

     

    [DataManager.swift]

    func addNewMemo(_ memo:String?){
            // 메모는 Core Data가 만들어준 데이터기 때문에 생성자 파라미터로 context를 던져줘야 한다.
            // 이렇게하면 DB에 메모를 저장하는데 필요한 비어있는 인스턴스가 생성
            let newMemo = Memo(context:mainContext)
            
            
            // 비어있으니까 값을 채우자
            // 이렇게 한다고 바로 db에 저장되는 것이 아니고 저장하려면 context를 저장해야 한다.
            newMemo.content = memo
            newMemo.insertDate = Date()
            
            // context를 저장하는 메소드는 아래쪽에 saveContext()로 구현되어 있기때문에 가져다 쓰면됨
            saveContext()
        }

     

    [ComposeViewController.swift]

    @IBAction func save(_ sender: Any) {
            guard let memo = memoTextView.text, memo.count > 0 else{
                alert(message: "메모를 입력해주세요")
                return
            }
    //        let newMemo = Memo(content: memo )
    //        Memo.dummyMemoList.append(newMemo)
            
            DataManager.shared.addNewMemo(memo)
            
            NotificationCenter.default.post(name:ComposeViewController.newMemoDidInsert, object: nil)
            
            dismiss(animated: true, completion: nil)
        }

    이렇게 해도.. 안될거같은데.. willAppear 메소드는 호출 안된다고 했는데..

     

     

     

    역시나.. 메모를 쓰고 저장을 눌러도 반응이 없어 디비에 저장이 안됬나 하고 다시 앱을 실행해보니까 db에는 정상적으로 

     

    들어가 있는 것을 확인할 수 있다.

     

     

    그래서 이전단계에서도 메모를 저장하면 Notification을 전달하고 observer를 추가한다음 table.reload를 하게 구현

     

    흐음..

     

    [DataManager.swift]

    func addNewMemo(_ memo:String?){
            // 메모는 Core Data가 만들어준 데이터기 때문에 생성자 파라미터로 context를 던져줘야 한다.
            // 이렇게하면 DB에 메모를 저장하는데 필요한 비어있는 인스턴스가 생성
            let newMemo = Memo(context:mainContext)
            
            
            // 비어있으니까 값을 채우자
            // 이렇게 한다고 바로 db에 저장되는 것이 아니고 저장하려면 context를 저장해야 한다.
            newMemo.content = memo
            newMemo.insertDate = Date()
            
            memoList.insert(newMemo, at: 0)
            // context를 저장하는 메소드는 아래쪽에 saveContext()로 구현되어 있기때문에 가져다 쓰면됨
            saveContext()
        }

    내가 생각했던건 아예 뜯어 고치는 거였는데 사실 왜 안됐는지는 간단했다 table이 미리구현 한 observer에서 load를 제대로 하고 있긴

     

    했는데 memoList에 저장하는 값이 바로바로 안들어가서 저장 직후에는 안보이는 것이였다..

     

    위에처럼 memoList.insert()를 써서 맨앞에 삽입해주면 끝  

     

    * 배열 맨뒤에 넣으려면 append

     

    댓글

Designed by Tistory.