【发布时间】:2020-04-05 19:08:14
【问题描述】:
试图将用户的 textView.text 保存到 Realm 中。想如果我将我的保存函数调用到 textFieldDidEndEditing 函数中,它会触发我的领域数据库来保存它。函数运行正常(结束编辑时打印“已成功保存”),但是当我关闭并返回时,没有任何数据。
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>()
}
'''
【问题讨论】:
-
我有几个问题要问你。您的 Menu 对象是否已由领域管理?还是还需要保存到领域?你的 NoteViewController 是用来编辑和创建笔记的吗?尽可能多地发布代码。至少,查看您的 Menu 类定义、您在 textView 中加载的内容以及如何使用文本加载 textView 会有所帮助。
-
没有任何数据是什么意思?您是否使用 Realm Studio 并检查数据库以查看它是否实际保存?此外,selectedNote 似乎是一个菜单
var selectedNote: Menu?,对吗?那个 var 设置在哪里? -
谢谢大家。刚刚将 Menu 类添加到上面的代码中。我确实在 Studio 中检查了领域文件 - 它保存了菜单数据和笔记类的 dateCreated 就好了,但不是笔记的正文。
-
这告诉我
theTextView.text!是一个空字符串。