工作代码
在tableView的didSelectRowAt IndexPath
方法中,我有一个调用来更新UserSave模型,该模型位于默认领域。该函数的结构如下:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let UserRealm = UserSave()
let realm = try! Realm()
try! realm.write {
UserRealm.articleLink = newsLink[indexPath.row]
UserRealm.articleBody = newsData[indexPath.row]
UserRealm.articleTitle = newsTitle[indexPath.row]
UserRealm.articleAuthor = newsSrc[indexPath.row]
}
performSegue(withIdentifier: "webKitSegue", sender: self)
}
运行此命令时,领域将按照新值更新。
问题代码
我有第二个模型UserPrefs,它也是默认领域的一部分。它在内部函数exrefresh(writeToRealm: String)
中被称为。该函数如下所示:
func exrefresh(passed: String) {
let UserRealm = UserPrefs()
let realm = try! Realm()
try! realm.write {
UserRealm.fetchUrl = passed
}
self.refreshControl!.beginRefreshing()
self.refreshControl!.sendActions(for: .valueChanged)
}
但是,运行此功能时,领域将保留其默认值,并且不会使用新的更新。
模型
// UserSave
import RealmSwift
class UserSave: Object {
@objc dynamic var articleTitle = "Default Title"
@objc dynamic var articleAuthor = "Default Author"
@objc dynamic var articleLink = "https://example.com"
@objc dynamic var articleBody = "Default Body"
}
// UserPrefs
import RealmSwift
class UserPrefs: Object {
@objc dynamic var applicationDark = false
@objc dynamic var fetchUrl = "https://example.com/"
}
问题
尽管我无法更改UserPrefs中的值,即使它们都在默认领域中,我也可以更新UserSave模型。我使用相同的代码(替换了名称)来更新两个模型,只有一个能正常工作。我在Realm Browser中拉起了.realm文件,并且能够监视UserSave的更改。我遵循了realm.io中的指南,它们的代码仅适用于一种模型。
谢谢您的帮助。
答案 0 :(得分:0)
您的问题提到默认值。假设对象已经存在,则需要获取该对象然后才能对其进行更新。否则,Realm不会知道您要指的是什么对象。
这是编写对象的代码。
func exrefresh(passed: String) {
let UserRealm = UserPrefs()
UserRealm.fetchUrl = passed
let realm = try! Realm()
try! realm.write {
realm.add(UserRealm)
}
}
如果您将只拥有一个该类型的对象,那么这里是更新它的代码。
let realm = try! Realm()
let results = realm.objects(UserPrefs.self)
let theOnlyOne = results.first!
try! realm.write {
theOnlyOne.fetchUrl = passed
}
这假设您已经进行了适当的错误检查,以知道它们在更新之前就存在。