将数组作为字符串存储到Swift中的核心数据

God*_*ike 2 arrays core-data ios swift

我对核心数据有疑问.我的实体看起来像这样:

  • 游戏(GameID,GameName,玩家,时间戳)
  • 用户(UserID,电子邮件,状态...)
  • 消息(GameID,MessageText,SendersID)

在桌上游戏我想存储这个游戏中的所有玩家.问题是它们可能是2个或更多,所以我必须存储一个数组......我想到了两个解决方案..

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

3,4,5,6,11

然后将其拆分为一个数组

let members = fetchedData.Players.characters.split{$0 == ","}.map(String.init)
Run Code Online (Sandbox Code Playgroud)

第二个:(我认为这是"更清洁"的版本)

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

游戏(GameID,GameName,时间戳)

并添加另一个实体:

玩家(GameID,UserID)

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

Jod*_*ins 5

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

对于其他任何事情,最好建议使用其他实体.不要担心额外的存储开销.根据您拥有的玩家数量,您可能会或可能没有更好的表现,但这不是重点.

它更干净,为您提供更多选择,并且更适合核心数据模型.

具体来说,通过该实体,您现在可以轻松地了解诸如"玩家X正在玩哪些游戏?"之类的内容."有多少玩家在玩所有游戏?" "列出所有玩家"等.

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

此外,当你建立关系时,你可能想要进行多对多的观察,因为游戏可以有很多玩家,并且玩家可以参与许多游戏.