我正试图在我的应用程序上存储一个CoreData格式的排行榜(具有最终的CloudKit功能),但我对如何最好地做到这一点感到困惑。
用户将能够创建和保存多个排行榜。每个排行榜都有一个创建日期、名称、ID以及该排行榜的所有分数。在核心数据模型中(如下所示),我将所有这些属性作为属性添加到排行榜实体中,而对于score属性,我将其保留为未定义。我正在考虑让它成为我的score结构的数组。但是,当我尝试在Persistence.swift文件中添加newLearboard.scores = [Score]()时,我被告知需要添加分数as NSObject。这是正确的方法吗?或者当我去添加/显示分数排行榜时,这会产生意想不到的后果吗?
Score是一个只有几个字段的结构,比如name和value等。
我还可能最终将Score数组转换为swift集合包中的OrderedSet。这会产生其他问题吗?

发布于 2021-11-22 18:08:50
核心数据不知道如何存储Swift结构。Xcode试图提供帮助,但并没有真正成功。使用as NSObject不会做您想要的事情,因为结构不能被类型转换为NSObject。
Core Data的方法是向模型中添加第二个名为Score的实体,然后添加一个从Leaderboard到Score的核心数据到多个关系。则每个Score将是NSManagedObject,它是NSObject的子类。
如果您可以首先将其转换为一个实例Data,那么也可以将任何内容放入Core Data中。如果您使用JSONEncoder,您可以将您的分数数组转换为Data,并使用Data属性。您必须编写代码,以便在每次更新分数时进行编码,并在每次读取分数时进行解码。如果您决定这样做,请记住,尽管JSONEncoder使用Codable,但Codable对Core Data没有用处(它可以使用NSCoding,但这不是一回事)。
https://stackoverflow.com/questions/70069884
复制相似问题