我想在 Realm Swift 数据库中存储格式化文本
I want to store formatted text in Realm Swift database
菜鸟 swift 这里的家伙。
我有这个 UITextView,用户可以在其中写东西。我需要将他的“笔记”存储到数据库中,其中包含所有格式化的文本。这意味着如果它有粗体,我需要稍后将其显示为粗体。
此文本应存储在本地领域 Swift 数据库中。任何解决方案我该如何实现?我想到了“Markdown”,但我不明白它有什么用。
非常感谢!祝你有美好的一天!
Realm 只存储 ascii 文本,不能直接存储任何格式属性,如 BOLD,这对大多数数据库都是如此。
如果你想存储格式化的字符串,一种选择是将其归档为 Data
类型,Realm 完全支持这种类型。然后,当读回数据时,将其从 Data
解档回格式化字符串。 (格式化字符串通常称为 Rich Text 或在代码中:attributedStrings)
下面的代码是 macOS 但 iOS 会相似
一个简单的例子 - 这是一个 class 来保存一些属性字符串数据
class MyAttrStringClass: Object {
@Persisted var attrStringData: Data!
}
假设我们有一个包含以下文本的(富文本)字段
你好,世界
要在 Realm 中存储带有属性字符串的 class:
let s = self.myRichTextField.attributedStringValue
let data = try! NSKeyedArchiver.archivedData(withRootObject: s, requiringSecureCoding: false)
let myObject = MyAttrStringClass()
myObject.attrStringData = data
try! realm.write {
realm.add(myObject)
}
然后当从 Realm 读回并在同一字段中显示属性字符串时
let myObject = realm.objects(MyAttrStringClass.self).first!
let data = myObject.attrStringData!
let s = try! NSKeyedUnarchiver.unarchivedObject(ofClass: NSAttributedString.self, from: data)
self.myRichTextField.attributedStringValue = s!
注意:上面没有任何错误检查。请通过安全地解包可选来保护您的代码。
菜鸟 swift 这里的家伙。 我有这个 UITextView,用户可以在其中写东西。我需要将他的“笔记”存储到数据库中,其中包含所有格式化的文本。这意味着如果它有粗体,我需要稍后将其显示为粗体。 此文本应存储在本地领域 Swift 数据库中。任何解决方案我该如何实现?我想到了“Markdown”,但我不明白它有什么用。
非常感谢!祝你有美好的一天!
Realm 只存储 ascii 文本,不能直接存储任何格式属性,如 BOLD,这对大多数数据库都是如此。
如果你想存储格式化的字符串,一种选择是将其归档为 Data
类型,Realm 完全支持这种类型。然后,当读回数据时,将其从 Data
解档回格式化字符串。 (格式化字符串通常称为 Rich Text 或在代码中:attributedStrings)
下面的代码是 macOS 但 iOS 会相似
一个简单的例子 - 这是一个 class 来保存一些属性字符串数据
class MyAttrStringClass: Object {
@Persisted var attrStringData: Data!
}
假设我们有一个包含以下文本的(富文本)字段
你好,世界
要在 Realm 中存储带有属性字符串的 class:
let s = self.myRichTextField.attributedStringValue
let data = try! NSKeyedArchiver.archivedData(withRootObject: s, requiringSecureCoding: false)
let myObject = MyAttrStringClass()
myObject.attrStringData = data
try! realm.write {
realm.add(myObject)
}
然后当从 Realm 读回并在同一字段中显示属性字符串时
let myObject = realm.objects(MyAttrStringClass.self).first!
let data = myObject.attrStringData!
let s = try! NSKeyedUnarchiver.unarchivedObject(ofClass: NSAttributedString.self, from: data)
self.myRichTextField.attributedStringValue = s!
注意:上面没有任何错误检查。请通过安全地解包可选来保护您的代码。