我有10个独立的视图控制器,每个视图控制器都需要拥有自己独特的过滤数据集。对象及其属性对于每个控制器都是相同的,但集合视图中显示的内容基于用户在该特定控制器中发布的内容。简而言之,每个星球都需要有自己的数据。我需要10个单独的型号吗?或者我可以通过行星名称排序Realm并使用NSPredicate过滤来实现此目的吗?下面的代码在视图加载时崩溃。
class Planet: Object {
dynamic var name = ""
dynamic var council = ""
dynamic var capitol = ""
dynamic var isAlive = false
dynamic var arrived = Date()
}
class firstVC: UIViewController, UICollectionViewDataSource, UICollectionViewDelegate {
let realm = try! Realm()
var planets : Results<Planet>!
let planet = Planet()
override fun viewDidLoad {
super.viewDidLoad()
planets = realm.objects(Planet.self).sorted(byKeyPath: "name", ascending: false)
planets = realm.objects(Planet.self).filter("name == firstPlanet", "")
}
// Delegate Methods
func numberOfSections(in collectionView: UICollectionView) -> Int {
return 1
}
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
return planets.count
}
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: reuseIdentifier, for: indexPath) as! FirstVC
cell.awakeFromNib()
return cell
}
}
我有一个自定义单元格类PlanetCell
,其中存储了视图,因此cell.awakeFromNib
。
答案 0 :(得分:1)
您不需要10个单独的模型......您只需要创建10个plant
类对象。
但是我们需要更多信息的崩溃问题,你能否显示崩溃消息?
答案 1 :(得分:1)
问题在于行星的定义和过滤。你为什么要将行星定义为隐式解包的可选项,除非你100%确定在填充行星时你的日期与你的NSPredicate相匹配?
此外,您的NSPredicate语法似乎是错误的,它应该看起来像假设firstPlanet是行星的实际名称而不是变量名称:planets = realm.objects(Planet.self).filter("name == 'firstPlanet'")
。如果它是变量名称,它应如下所示:planets = realm.objects(Planet.self).filter("name == %@", firstPlanet)
。
您还可以级联排序和过滤,您不需要分两行,例如:planets = realm.objects(Planet.self).filter("name == 'firstPlanet'").sorted(byKeyPath: "name", ascending: false)
。