iOS

iOS - memo 앱 만들기 # 11 DB구현2

행복하게사는게꿈 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