将编程数据应用程序转换为Core数据应用程序

时间:2011-10-31 20:22:21

标签: iphone core-data queue

我在苹果开发人员部分阅读了很多关于核心数据的内容,这里有关于堆栈溢出的问题,在我开始尝试将它们应用到我的应用程序之前我想问几个问题,此时这些问题仅适用于编程数据。

申请理念是:用户是赛车手。他驾驶不同的赛道。每个电路都有几条命名曲线,以一定的速度和一定的效率驱动。 因此,应用程序必须存储Circuits,每个电路的多个曲线以及通过单个曲线存储最高速度和效率的许多(如200个)驱动器(例如字符串“Outstanding”“Good”“Bad”)。驱动程序在应用程序中用于队列中,一旦达到200个驱动程序以便随着时间的推移改进统计数据和驱动程序的体验,其中最后一个意味着首先出现。

我创建了具有适当参数和关系的实体。

现在对于启动器,我想定义一个示例电路,该电路在首次启动应用程序时创建,然后在用户更改或输入数据后加载。

1 - 我猜因为数据量不大我可以在第一次运行时生成数据,将其存储到核心数据中,然后在应用程序的每次启动时以某种方式检查核心数据是否存在并且基于在那上面创建新的或使用当前。我读到了将数据存储到plist并通过xml和stuff导入它们,但我不需要这样做吗?我可以创建,保存,然后检查是否存在某些数据,以确定这是第一个应用程序启动还是不是?

2 - 我不确定如何将队列保存到核心数据。目前我在脑海中设计它,每个曲线的队列将由Drivethrough实体组成,与曲线有多对一关系,带有一个名为index的参数,这样我知道哪个驱动器是第一个,哪个是最后一个。我不确定那么我将如何实现删除第一个驱动器的队列能力。我是否会被迫加载所有数据,在队列中处理它然后将所有数据保存到核心数据?或者它会接受某种删除第一次驱动并重新计算索引?

3 - 我说得对,我的所有数据加载应该在“viewWillAppear”中的视图控制器中进行?用户按下每个驱动器的“保存”或“输入”按钮后立即保存?

我不是要求代码我只是希望有人告诉我这是否通常是一种好的方法,或者你是否会做出截然不同的。

谢谢。

1 个答案:

答案 0 :(得分:1)

1)将数据存储在外部plist文件中,然后通过NSDictionary导入+dictionaryWithContentsOfURL:,然后遍历此字典并导入到Core Data存储中这个案例。如果您想在外部序列化电路数据以便用户可以导入电路,或者您可以通过编辑plist中的XML数据手动更改初始电路,那将是必要的。

2)在iOS-5.0之前,实体作为无序NSSet存储在Core Data中。如果您的目标是iOS 4.x,则需要添加一个属性来存储队列中的订单,这样您就可以计算最后添加的项目。您还必须编写一个方法来搜索实体并返回编号最高的排序属性,以便您知道下一个drivethrough sort属性的用途。如果您仅定位iOS 5.0,则可以将该关系标记为已订购,并将其存储为NSOrderedSet。请参阅:Core Data Release Notes for iOS 5.0 - Managed Objects

3)-viewWillAppear:中运行数据加载代码取决于生成或加载数据所需的时间。如果需要花费相当多的时间,你将不希望同步执行此操作,因为如果代码在-viewWillAppear:中运行,它将阻止UIKit运行的主线程如果时间不是微不足道的话(在100-以下)至少200ms),您将需要在后台线程中生成数据,该线程可以在-viewWillAppear:中启动。最简单的方法是使用Dispatch Queuedispatch_async()