1

我需要关于如何使用可以从服务器上传/下载并通过游戏中心发送的对象正确实现 CoreData 的建议。

该应用程序类似于集换式卡牌游戏,您可以从这两个独立的实体中获得灵感:

  • 卡片:实际唯一的卡片,包含每张卡片的所有信息。“卡”的实体是静态的,不会改变,它们也不需要在服务器上发送,因为我需要做的就是发送“CardId”来拉“卡”实体。
  • UserCard:用户拥有的所有卡,用户可能多次拥有同一张卡,但这将是一个不同的“UserCard”,带有指向基本“Card”的指针(“CardId”)。他们总是在变化。它们需要通过 GameCenter 轻松发送并从服务器上传/下载。此外,当用户访问朋友的个人资料以查看他们拥有哪些卡时,需要从服务器下载一些临时的“用户卡”。

有人对如何正确执行此操作有任何建议吗?目前我有两个想法:

A. 对所有内容都使用 CoreData,这意味着“UserCard”是 NSManagedObject 子类,它们被智能编码/解码(使用 NSCoding)以上传/下载并通过 GameCenter 发送。基本的“卡片”在 Core Data 中设置为关系。还为“UserCard”设置了“临时”属性,以便能够知道哪些不属于当前用户,以便以后可以将其删除。

B. 仅对基本“卡”使用 CoreData,对“用户卡”使用 NSObject 子类。这使我可以直接使用“UserCard”,而无需将它们插入 CoreData。使通过 GameCenter 下载/上传和发送变得更加容易。它还消除了对“临时”属性的需要,因为对象只会在视图停止使用它们时被释放。这种方法的问题是我需要另一种方法来将当前用户的“UserCard”存储在设备中,因为它们确实需要离线使用。

谢谢!

4

1 回答 1

2

就个人而言,我会到处使用 CoreData。原因:

  1. 无论如何,您已经不得不深入研究 CoreData 来处理 Cards
  2. 只需创建一个名为 NSManagedObject+JSON 的 NSManagedObject 类别。其中有一个简单的方法被调用-(NSDictionary*)jsonRepresentation,并将 UserCard 格式化为字典并返回自身。超级容易。
  3. 使用 CoreData 并经常保存会更安全,而不是冒着写入文件的风险,并且: 1. 损坏(极不可能,但如果这样做,用户会生气);或 2. 没有完全写入(用户可以在应用程序有时间将所有内容写入文件之前终止应用程序)
  4. 实现 UserCard 实体的额外工作量很小。
  5. 您将获得 CoreData 的内置内存管理和搜索功能。

我刚刚完成了一个使用 CoreData 的大型项目,所以我可能有点偏见。不过,根据您在问题中的陈述,我会为所有事情选择 CoreData。在处理 CoreData 和 Web 服务器时,这里有一些有用的开源库:

神奇唱片

AF增量存储

以及将 CoreData 与 Web 服务器集成的精彩教程。

于 2013-07-24T04:20:32.613 回答