【问题标题】:Store Array as String to Core Data in Swift将数组作为字符串存储到 Swift 中的核心数据
【发布时间】:2016-02-09 21:36:29
【问题描述】:

我有一个关于核心数据的问题。我的实体如下所示:

  • 游戏(游戏ID、游戏名称、玩家、时间戳)
  • 用户(用户 ID、电子邮件、状态...)
  • 消息(GameID、MessageText、SendersID)

在桌面游戏中,我想存储所有参与此游戏的玩家。问题是它们可以是 2 个或更多,所以我必须存储一个数组……我想到了两种解决方案……

我的第一个解决方案是将字符串存储到如下所示的成员中:

3,4,5,6,11

然后拆分成一个数组

let members = fetchedData.Players.characters.split{$0 == ","}.map(String.init)

第二个:(我认为这是“更干净”的版本)

我会让我的实体看起来像这样:

游戏(游戏 ID、游戏名称、时间戳)

并添加另一个实体:

玩家(游戏ID、用户ID)

你怎么看?如果我创建另一个实体,我有什么优势? (我认为我会有更好的表现,但我也认为我需要很多数据)

【问题讨论】:

  • 我认为第二种方法更简洁,它使模型对象使用 id 指向其他对象,而不仅仅是将对象存储在对象中。另外我今天早上发现了realm.io,我认为它对你也有用。
  • 您实际上应该在GameUser 之间创建一个关系。 Core Data 将处理很多魔法。这里有教程code.tutsplus.com/tutorials/…和官方文档developer.apple.com/library/ios/documentation/Cocoa/Conceptual/…
  • 感谢您的回答! :) 我认为新实体是更好的选择。 @Mayerz 我在另一个项目中使用了领域,没关系,但我想尝试核心数据,因为我认为了解核心数据的工作方式很好,但谢谢! :)
  • @Godlike 好的!祝你好运

标签: ios arrays swift core-data


【解决方案1】:
  1. 你为什么不看How to save Array to CoreData?

  2. 但是,您可以使用以下方法将数组转换为 String

    let arrayAsString = [1, 2, 3].description //[1, 2, 3]
    

【讨论】:

    【解决方案2】:

    如果您要存储简单数据数组,例如整数,那么使用可转换属性是合理的(请参阅 Bartlomiej Semanczyk 的回答)。但是请注意,从核心数据的角度来看,该属性只是一个字节袋,没有任何意义,也没有搜索。此外,更改数组的一项会更改整个属性。

    最好建议使用其他实体。不用担心额外的存储开销。根据您拥有的玩家数量,您的表现可能会更好,也可能不会,但这不是重点。

    它更简洁,为您提供更多选择,并且更适合核心数据模型。

    具体来说,通过实体,您现在可以轻松了解“玩家 X 正在玩哪些游戏?”之类的信息。 “有多少玩家在玩所有游戏?” “列出所有玩家”等

    现在,当您建立关系时,无需将“gameid”添加到玩家实体。

    此外,当您建立关系时,您可能希望多对多地看待一个游戏可以有很多玩家,而一个玩家可以参与很多游戏。

    【讨论】:

      猜你喜欢
      • 2015-04-25
      • 1970-01-01
      • 2016-05-03
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 2023-02-07
      • 1970-01-01
      • 2017-09-20
      相关资源
      最近更新 更多