Проблема сохранения текста из UITextView в Realm (Swift 5) - PullRequest
1 голос
/ 05 апреля 2020

Попытка сохранить пользовательский textView.text в Realm. Я подумал, что если я вызову свою функцию сохранения в функцию textFieldDidEndEditing, она вызовет мою базу данных Realm для ее сохранения. Функция работает нормально (выводит «Успешно сохранено», когда я заканчиваю редактирование), но когда я закрываюсь и возвращаюсь, никаких данных там нет.

import UIKit
import RealmSwift

class NoteViewController: UIViewController, UITextViewDelegate {

    var textView = UITextView()
    var notes: Results<Notes>?
    let realm = try! Realm()

    var selectedNote: Menu? {
        didSet {
           loadNotes()
        }
    }

    @IBOutlet weak var theTextView: UITextView!
    override func viewDidLoad() {
        super.viewDidLoad()

        loadNotes()

        self.textView.delegate = self

    }

    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        self.view.endEditing(true)
    }

    override func viewDidDisappear(_ animated: Bool) {
        saveNote()
    }




    func textViewDidBeginEditing(_ textView: UITextView) {

    }

    func textViewDidEndEditing(_ textView: UITextView) {

     saveNote()
    }



   //MARK: - Data Manipulation

    func loadNotes() {
        notes = realm.objects(Notes.self)

        textView.reloadInputViews()


    }

    func saveNote() {
        if let currentNote = self.selectedNote {
                 do {
                     try self.realm.write {
                         let newNote = Notes()
                         newNote.body = theTextView.text!
                         newNote.dateCreated = Date()
                         currentNote.notes.append(newNote)
                        print("Saved successfully")
                     }
                 } catch {
                     print("Error saving note body, with \(error)")
                 }
             }


    }


}

Realm File: 

class Notes: Object {
    @objc dynamic var body: String = ""
    @objc dynamic var dateCreated: Date?
    var parent = LinkingObjects(fromType: Menu.self, property: "notes")

}

Menu Realm File:

class Menu: Object {
    @objc dynamic var name: String = ""
    @objc dynamic var preview: String = ""

    let notes = List<Notes>()

}

 '''

1 Ответ

0 голосов
/ 24 апреля 2020

Похоже, что вы используете раскадровку для создания макета.

Затем избавьтесь от var textView = UITextView() и textView.reloadInputViews().

Замените self.textView.delegate = self на theTextView.delegate = self в viewDidLoad ().

Чтобы проверить содержимое TextView, измените оператор печати:

print("Saved successfully: \(theTextView.text!)")

Если текст не напечатан сразу после «Успешно сохранено:», тогда проверьте Интерфейсный конструктор для theTextView: проверьте выход TextView и то, что это на самом деле UITextView, который вы используете (поскольку ваше приложение печатает что-то, похоже, что оно каким-то образом подключено, потому что в противном случае оно может обработать sh в newNote.body = theTextView.text!).

I Думаю, вы также забыли инициализировать TextView с помощью notes.body. Попробуйте изменить loadNotes () следующим образом:

func loadNotes() {
    notes = realm.objects(Notes.self)

    theTextView.text = notes.body
}
...