swift - 使用 Realm 保存 viewController 之间的模型状态 - 它会破坏关系

标签 swift realm

我在我的 swift 项目中使用 Realm。

这是我的对象,膳食和 react - 具有一对多的映射:

enum DishType: String{
  case Breakfast
  case Second_breakfast
  case Brunch
  case Elevenses
  case Lunch
  case Tea
  case Dinner
  case Supper
  case Snack
}

class Meal : Object{
  dynamic var date: NSDate = NSDate()
  dynamic var dishType = DishType.Breakfast.rawValue

  var dishTypeEnum: DishType{
    get{
      return DishType(rawValue: dishType)!
    }
    set{
      dishType = newValue.rawValue
    }
  }

  dynamic var foodItems: String = ""
  var reactions = List<Reaction>()
}


enum Category: String{
  case Apetit
  case Energy
  case Emotion
}

enum Type: String{
  case Positive
  case Negative
}

class Reaction: Object{

  dynamic var category = Category.Apetit.rawValue
  dynamic var text: String?
  dynamic var selected: Bool = false
  dynamic var type = Type.Positive.rawValue
  .....
}

我需要将状态从一个 viewController 保存到另一个。 我选择了一些 react ,返回到 react 屏幕时我必须看到这些 react 被选中。

saving Reaction state

我正在考虑保存到 Realm 中,但我还必须在输入一组新数据时清除所有反应状态。 从 Reaction 中删除时,似乎也破坏了关系。我保存了 Meal 对象(它也与 Reaction 有关系)。

我不知道如何从已保存的餐点中区分指示状态的 react 和相关 react 。

我正在考虑为状态保存 Reactions,就在 NSUserDefaults 中。但是像这样我会结合这两个框架。

你怎么看?你如何保存状态?

最佳答案

I was thinking saving into Realm, but I also have to clear all reactions state when entering a new set of data. When deleting from Reaction, it seems that it also breaks the relation. I have Meal objects saved (which also have a relation with Reaction).

当您对 Reaction 对象进行修改时,这些修改将出现在 react 链接的位置。因此,除非是重新措辞,否则您可能不想对它们进行修改。 (例如,修复拼写错误“你不想要甜点”=>“你不想要甜点”😉)此外,如果你删除它们,它们也会从它们链接的 Meal 对象中删除.

I was thinking saving Reactions for state, just in NSUserDefaults. But like this I will combine both frameworks.

那不是必须的。您可以使用 Realm 完全解决您的用例。

解决方案是不要在 Reaction 中包含属性 selected。相反,您只需将选定的 react 添加到 Meal 中。在您的 View Controller 中,这意味着您通过使用 let reactions = realm.objects(Reaction) 查询所有单元格来为每个 Reaction 呈现一个单元格。

然后您可以通过检查它们是否包含在 Meal 的 react 中来确定是否需要添加复选标记,如下所示:

meal.reactions.contains(reaction)

如果选择了对某餐的 react ,则将其添加到该餐中:

meal.reactions.add(reactions[indexPath.row])

如果取消选择 react ,则将其从膳食中删除:

meal.reactions.removeAtIndex(meal.reactions.indexOf(reactions[indexPath.row]))

关于swift - 使用 Realm 保存 viewController 之间的模型状态 - 它会破坏关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36543257/

相关文章:

ios - Swift 应用程序开发错误 - 线程 1 信号 SIGABRT

ios - 如何触发紧急电话

android - Realm - 跳过以编程方式编写嵌套对象

ios - 使用 Realm 搜索数组 (iOS)

ios - 如何获取 iOS 中 Realm 对象服务器上的存储大小?

ios - 与 Java Netty 类似,在 SwiftNIO 中添加多个 channel 管道处理程序

swift - 当用户在 UItextfields 中快速输入时如何验证和更新模型

swift - 如何创建推特标签栏推送动画

realm - Swift 1.2 的新 Realm 版本

realm - 有没有办法修改 RLMObject 而不保留它?