2010-11-16 16 views
0

我想为一个iphone应用程序构建一个具有2个核心数据处理程序的应用程序。我可以为一个iphone应用程序拥有多个Core数据处理程序吗?

该应用程序将是一个预填充信息的体育比赛。让我们称它为prefilledDB作为参考。这个预填充的数据库将是只读的,我不希望用户添加/编辑/删除或更改任何内容。

第二个数据库(“gameDB”)将具有相同的核心数据关系/模型/实体和结构。

当用户选择“新游戏”时,它将空白/清空gameDB并填充预填充的数据库内容,并且“继续游戏”只使用预填充数据库,假设它不为空。

但是,我不确定这是否是正确的做法。因此,我的问题是处理这种处理的最佳方式是什么。内置的迁移系统是否会比删除/重新创建数据库更好 - 或者也许只是使用SQLite作为预填充的数据库,然后用其内容填充gameDB?

对此的任何帮助将是伟大的。

回答

2

如果应用程序包中包含应用程序包中的所有内容,则该持久性存储将只能读取。要使用readwrite持久性存储中的数据,您需要将数据复制到应用程序包之外的持久性存储中,例如在应用程序的文档目录中。

你有这样做的方法有两种:

1)最简单的:创建为每个游戏一个新的持久化存储。在这种情况下,您只需将prefilled持久性存储文件从应用程序目录复制到文档目录,同时将其重命名为当前游戏名称。然后你会打开该文件作为gameDB,它会自动填充已有的数据。这个系统的缺点是你有大量的文件,每个游戏都有一个文件,并且他们之间的数据很难被共享。

2)最好:在同一个环境中同时使用两个持久性存储。这设置起来比较复杂,但给你更大的灵活性。诀窍是创建一个抽象子实体,例如Opponent,然后除了它们的名字外,还有两个相同的子实体,例如, PreOpponentGameOpponent。使用数据模型中的配置选项,将PreOpponent分配给prefilled持久存储,将GameOpponent分配给gameDB持久存储。在Opponent类中编写一些代码,将其自身克隆到新的GameOpponent实例。当新游戏开始时,将所有从prefilled开始的实例复制到'gameDB'。所有新近克隆的GameOpponent实例将自动写入gameDB持久性存储。

后一个系统的优点是您可以将所有活动数据存储在一个只读存储器中,然后您可以根据需要进行操作。例如。你可以检查以前的游戏,甚至克隆以前的游戏,为新游戏创造一个新的起点。

Marcus Zarrus在他的网站上显示了一些代码,显示了如何设置托管对象的自动克隆。

+0

谢谢你有道理。非常感谢! – zardon 2010-12-10 14:37:52

相关问题