Swift和Realm:在列表中添加对象时获取线程1:信号SIGABRT

时间:2017-03-06 02:22:29

标签: swift swift3 realm

我定义了三个类:

CoffeeBrand:

dynamic var brandName = ""
let brands = List<Coffee>()

咖啡:

dynamic var name = ""
let cupAmount = List<CoffeeCup>()

CoffeeCup:

dynamic var cup = 0
dynamic var caffeine = 0

并且想尝试一下,所以我添加了一个品牌星巴克来试试它在桌子上会是什么样的

class CoffeeListsTableViewController: UITableViewController {

    // MARK: Properties
    var brands: Results<CoffeeBrand>!

    override func viewDidLoad() {
        super.viewDidLoad()
        let Starbucks = CoffeeBrand(value: ["Starbucks",["Iced Latte", [200,150],[500,150]]])

        try! realm.write() {
            realm.add(Starbucks)
        }
    }
}

但我得到的是“线程1:信号SIGABRT”,我检查了我认为这应该没有线程1(我谷歌并试图找到其他人的问题有什么不对)

在表数据源中使用:

override func numberOfSections(in tableView: UITableView) -> Int {
    // #warning Incomplete implementation, return the number of sections
    return 1
}

override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return brands.count
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{
    //let cellIdentifier = "CoffeeBrandTableViewCell"
    let cell = tableView.dequeueReusableCell(withIdentifier: "CoffeeBrandTableViewCell", for: indexPath) as! CoffeeBrandTableViewCell
    // in my cell, only a label of brandName
    let brandList = brands[indexPath.row]   
    cell.brandName.text = brandList.brandName
    return cell
}

1 个答案:

答案 0 :(得分:0)

从该代码的外观来看,您永远不会为brands分配值。由于您宣布明确解开品牌,这可能会导致问题。

class CoffeeListsTableViewController: UITableViewController {

    // MARK: Properties
    let brands = try! Realm().objects(CoffeeBrand.self)

    override func viewDidLoad() {
        super.viewDidLoad()
    }
}

另外,realm.add每次调用时都会向Realm数据库添加一个新对象。在当前的代码中,每次加载视图控制器时,都会添加星巴克对象的新副本。在向Realm添加对象时添加更多控件会更合适。