ios - Realm on Swift - 创建关系

标签 ios swift realm realm-list

我有两个形成一对多关系的类:

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/

相关文章:

ios - 如何更新 parse.com 中的数据浏览器 channel ?

java - 如何在Android中的多个线程中更新Realm?

ios - 带有单元格的 UITableView 部分

iOS - Perfecto Mobile 中的屏幕共享

ios - 想要快速使用滑动手势在标签栏之间导航

ios - NotificationCenter 添加观察者(观察者 :selector:name:object) -- what is object?

ios - 有没有更好的方法来检查事件通知设置?

swift - 如何在 Swift 中使用精度?

ios - RLMException : Can't persist property 'id' with incompatible type, 但不存在

iphone - 为什么我无法从 iOS 应用程序向粉丝页面发帖?