检索tableview Swift的域属性计数

时间:2017-12-05 11:47:49

标签: ios uitableview realm

我正在使用Realm 3和Swift 4,而且还是Realm和Swift的新手。需要指导:)

鉴于这个领域模型

class Person: Object, Mappable {
    let dog = List<Dog>()

    required convenience init?(map: Map) {
        self.init()
    }
}

我怎样才能得到每个人的狗数?

我想要实现的是我的桌面视图中有多个部分,每个人都会有相应人员的狗列表。

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    let owner = realm.objects(Person.self)
    return owner.dog.count // This is not working. What should I change it to ?
}

我一直在网上搜索,但无法找到有关此类问题的任何指南。

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:2)

我可能会将var dog重命名为var dogs,以表明它可能包含多只狗。

这是一个直截了当的解决方案,可以打印所有者姓名和狗数。

do {
    let realm = try Realm()
    let people = realm.objects(Person.self)

    for person in people {
        let name = person.personName
        print(name)

        let dogs = person.dogs
        print(dogs.count)
    }

} catch let error as NSError {
    print(error.localizedDescription)
}

领域列表具有数组功能,因此可以迭代,计数可用,也可以过滤。

您问题中的代码

let owners = realm.objects(Person.self)

会将Realm中的所有Person对象分配给所有者var(Person的数组),因此它不是所有人的全部,这就是为什么它没有.dog属性。

您需要在tableView的每个部分中建立哪个人,查询该人的Realm,然后返回person.dogs.count。

确定如何确定哪个人在哪个部分进行的代码未在原始问题中显示,但我们假设您想要第0部分中的人0(可能存在排序问题,因此这只是概念性的)< / p>

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    let owners = realm.objects(Person.self).sorted('name')
    let thisOwner = owners[section]
    let dogCount = thisOwner.dogs.count
    return dogCount
}

答案 1 :(得分:0)

您是否尝试过查询逻辑。

realm.objects(Person).filter("dogs.@count > 0")

realm.objects(Person).filter("ANY dogs.@count > 0")