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

时间:2015-11-09 09:13:25

标签: ios arrays swift core-data

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

  • 游戏(GameID,GameName,Players,timestamp)
  • 用户(用户ID,电子邮件,状态...)
  • 消息(GameID,MessageText,SendersID)

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

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

3,4,5,6,11

然后将其拆分为数组

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

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

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

游戏(GameID,GameName,时间戳)

并添加另一个实体:

玩家(GameID,UserID)

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

2 个答案:

答案 0 :(得分:5)

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

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

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

具体来说,通过该实体,您现在可以轻松地知道诸如“哪个游戏是玩家X玩?”之类的内容。 “有多少玩家在玩所有游戏?” “列出所有玩家”等等。

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

此外,当你建立关系时,你可能想要做多对多的观看,因为游戏可以有很多玩家,并且玩家可以参与很多游戏。

答案 1 :(得分:2)

  1. 为什么不阅读How to save Array to CoreData?

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

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