2011-10-31 42 views
3

我在苹果开发者部分读了很多关于核心数据,并在这里对堆栈溢出,我想请教几个问题之前,我开始试图实现他们到我的应用程序,此时的作品只有编程数据。转化编程数据应用为核心的数据应用

应用想法是:用户是一名赛车手。他驾驶不同的赛道。每个电路都有几条命名曲线,以一定的速度和一定的效率驱动。 因此,应用程序必须存储电路,每个电路的许多曲线以及通过存储最高速度和效率的单独曲线(例如字符串“Outstanding”“Good”“Bad”)的许多(如200个)驱动通路。在应用程序中,排队使用的是排队,最后意味着一旦您达到200次传动通过,就可以改进统计数据随时间和驾驶员的体验。

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

用于起动机,我想限定的样本电路,这是在第一次启动该应用程序的创建和与用户改变或inputed数据加载然后稍后。

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

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

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

我不要求代码,我只是很想有人告诉我,这通常是一个好方法,或者如果你会做截然不同。

谢谢。然后在外部plist文件

回答

1

1)存储数据经由+dictionaryWithContentsOfURL:导入到NSDictionary然后通过这个字典迭代和导入到您的核心数据存储不是必要在这种情况下。如果你想要在外部串行化你的电路数据,这将是必要的,这样用户可以导入电路,或者你可以通过编辑plist中的XML数据来手工更改初始电路。

2)在iOS-5.0之前,实体以核心数据存储为无序的NSSet。如果您的目标是iOS 4.x,则需要添加一个属性以将订单存储在队列中,以便计算最后添加的项目。您还必须编写一个方法来搜索实体并返回最高编号的排序属性,以便您知道如何使用下一个drivethrough排序属性。如果你的目标是iOS 5。0,您可以将关系标记为NSOrderedSet。请参阅:Core Data Release Notes for iOS 5.0 - Managed Objects

3)运行数据加载代码-viewWillAppear:取决于它需要多长时间来生成或加载数据。如果需要大量时间,则不会同步执行此操作,因为它会阻塞主线程。如果代码在-viewWillAppear:中运行,则UIKit将运行。如果时间不平凡(至少在100-200ms之间) ,您将需要在后台线程中生成数据,该后台线程可以在-viewWillAppear:中启动。最简单的方法是使用Dispatch Queuedispatch_async()

+0

你是不是说-viewDidAppear:对于后台线程?或者你的意思是真的 - viewWillAppear:因此我不明白吗? – Glademist

+0

如果您将数据加载到'-viewDidAppear:'中并显示活动或进度指示器视图,则这不是问题。但是我担心的是,如果加载过程花费太长时间,'-viewWillAppear:'在加载代码完成之前不会返回(除非在后台线程中运行)。 – Andrew

+0

我现在明白了,非常感谢。 – Glademist