Realm Swift Filter in Multiple ViewControllers



我有 10 个独立的视图控制器,每个控制器都需要有自己唯一的过滤数据集。对象及其属性对于每个控制器都是相同的,但集合视图中显示的内容基于用户在该特定控制器中发布的内容。简而言之,每个行星都需要有自己的数据。我需要 10 个单独的模型吗?或者我可以通过按行星名称排序并使用 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.

您不需要 10 个单独的模型...你只需要创建 10 个plant类的对象。
但是崩溃的问题我们需要更多信息,你能显示崩溃消息吗?

问题在于行星的定义和你的过滤。为什么要将行星定义为隐式解包可选,除非您 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)

最新更新