swift - 将文本从 UITextView 保存到领域(Swift 5)时出现问题
问题描述
试图将用户的 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>()
}
'''
解决方案
看起来您正在使用情节提要来创建布局。
摆脱var textView = UITextView()
然后textView.reloadInputViews()
。
替换self.textView.delegate = self
为theTextView.delegate = self
viewDidLoad() 中的。
要检查 TextView 的内容,请修改您的打印语句:
print("Saved successfully: \(theTextView.text!)")
如果在“已成功保存:”之后没有立即打印文本,则检查 TextView 的界面构建器:验证 theTextView 的出口,这实际上是您正在使用的 UITextView(因为您的应用确实打印了一些看起来像是以某种方式连接的内容因为否则它会崩溃newNote.body = theTextView.text!
)。
我想你也忘了用 notes.body 实际初始化 theTextView。尝试像这样修改 loadNotes():
func loadNotes() {
notes = realm.objects(Notes.self)
theTextView.text = notes.body
}
推荐阅读
- excel - Excel:如何隐藏选择框飞来飞去?
- c++ - 有没有办法将模板函数中允许的类型列入白名单?
- ibm-information-server - 从 Information Server 中的关系属性中获取值
- c - C中的全局部分规则
- r - 非等连接 - 比较 R 中的两个数据帧
- cgal - 构造 Polygon_set_2 时如何修复“CGAL::Precondition_exception”
- sql - 关系数据库 - 添加产品
- javascript - 为什么python不允许将未绑定的标识符用作字典键?
- reactjs - 从reactjs调用时,axios api没有收到调用
- c# - 在 Dart 中序列化的 JSON 值包含不会反序列化