【问题标题】:Suggestion for CoreData and object handling对 CoreData 和对象处理的建议
【发布时间】:2013-07-08 21:43:39
【问题描述】:

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

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

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

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

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

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

谢谢!

【问题讨论】:

    标签: ios objective-c cocoa-touch core-data nsmanagedobject


    【解决方案1】:

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

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

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

    MagicalRecord

    AFIncrementalStore

    And a great tutorial for integrating CoreData with a web server.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多