对核心数据和对象处理的建议

时间:2013-07-08 21:43:39

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

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

该应用类似于交易卡游戏,您可以从这两个独立的实体中获取想法:

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:2)

就个人而言,我会全身心地使用CoreData。理由:

  1. 你已经不得不潜入CoreData来处理卡片了
  2. 只需创建一个名为NSManagedObject + JSON的NSManagedObject类别。它有一个名为-(NSDictionary*)jsonRepresentation的简单方法,并将UserCard格式本身放入字典中并返回自身。超级容易。
  3. 使用CoreData并经常保存会更安全,而不是冒着写入文件的风险,它可能:1。损坏(非常不可能,但如果确实如此,用户会发疯);或者2.没有完全写入(用户可以在有时间将所有内容写入文件之前杀死该应用程序)
  4. 实施UserCard实体的额外工作量很小。
  5. 您可以获得CoreData的内置管理和搜索功能。
  6. 我刚刚完成了一个使用CoreData的大型项目,所以我可能有点偏颇。根据你在问题中的陈述,我会把CoreData用于一切。在处理CoreData和Web服务器时,以下是一些有用的开源库:

    MagicalRecord

    AFIncrementalStore

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