我有两个形成一对多关系的类:
class FooA: Object {
dynamic var someAValue: String
let fooBList = List<FooB>()
}
class FooB: Object {
dynamic var someBValue: String
}
我以这种方式将对象添加到 Realm 中:
let fooA = FooA()
fooA.someAValue = 'a value'
let fooB = FooB()
fooB.someBValue = 'a value'
fooA.fooBList.append(fooB)
let realm = try! Realm()
try! realm.write {
realm.add(fooA)
}
一切顺利,对象已插入到 Realm 中。但是,当我尝试像这样访问 FooB 对象时:
fooA.fooBList[0]
它突然响起,应用程序崩溃了!所以,显然,我没有将关系对象正确插入到 Realm 中,并且关系已损坏。我在 Realm 文档中错过了什么?我必须先创建数组并以另一种方式将其添加到父对象吗?
更新我的问题,这是想要爆炸的操作:
FooApiClient.getFooAObjects()
.subscribeOn(ConcurrentDispatchQueueScheduler(qos: .default))
.observeOn(MainScheduler.instance)
.subscribe { [weak self] in
switch $0 {
case .next(let fooAObjects):
self?.fooAObjects = fooAObjects
case .completed:
self?.fooTableView.reloadData()
loadingView?.hide()
case .error(let error):
loadingView?.hide()
self?.handleError(error)
self?.showNoFooView()
}
}
.addDisposableTo(disposeBag)
调用:self?.fooTableView.reloadData() 会导致 TableView 尝试显示检索到的 foo 对象以及它的走向。
最佳答案
尝试这样的事情。可能有一些错误。
class SomeTableViewController: UITableViewController {
var fooA : FooA?
override func viewDidLoad() {
super.viewDidLoad()
let realm = try! Realm()
if let aFooA = realm.objects(FooA.self).first{
fooA = aFooA
self.reloadTableView()
}
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if let _ = fooA{
return fooA!.fooBList.count
}
return 0
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "SomeCell", for: indexPath)
// Configure the cell...
let fooB = fooA!.fooBList[indexPath.row]
cell.titleLabel.text = fooB.someBValue
return cell
}
}
关于ios - Realm on Swift - 创建关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43126980/