将程序化数据应用转换为核心数据应用

3

我在苹果开发者论坛和Stack Overflow上阅读了很多关于Core Data的文章,现在想在开始实现之前问几个问题。我的应用程序目前只使用编程数据。

应用程序的想法是:用户是一名赛车手。他在不同的赛道上驾驶。每个赛道都有几个命名曲线,以特定的速度和效率驾驶通过。因此,应用程序必须存储赛道、每个赛道的多个曲线以及许多(例如200个)通过单独曲线的驾驶过程,存储顶速和效率(例如"优秀"、"良好"、"不好"等字符串)。驾驶过程在应用程序中用于队列,在达到200个驾驶过程后,最后一个进入的先出去,以便随着时间和驾驶员的经验改善统计数据。

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

现在,作为起点,我想定义一个示例赛道,在应用程序第一次启动时创建,并在以后加载由用户更改或输入的数据。

1- 我认为,由于数据量不大,我可以在第一次运行时生成数据,将其存储到Core Data中,然后在每次启动应用程序时,以某种方式检查是否存在Core Data,并基于此创建新的或使用当前的。我阅读了有关将数据存储到plist并通过xml导入它们等内容的文章,但我不需要这样做,对吗?我可以创建、保存,然后检查是否存在某些数据来知道这是第一次启动应用程序还是已经启动过了吗?

2- 我不确定如何将队列保存到Core Data中。目前,我在脑海中设计的是,每个曲线的队列都由具有与曲线之间的一对多关系的驾驶过程实体组成,其中包含一个名为索引的参数,以便我知道哪个驾驶过程是第一个和最后一个。然后我不确定如何实现删除第一个驾驶过程的队列功能。我会被迫加载所有数据,在队列中处理它,然后将所有数据保存到Core Data中吗?还是它接受某种形式的删除第一个驾驶过程并重新计算索引?

3- 我是否正确地说,所有数据加载都应在我的视图控制器中的"viewWillAppear"中进行?用户按下保存或输入按钮后立即保存它们?

我不要求代码,只是希望有人告诉我这是否是一般良好的方法,或者您是否会完全不同地做。

谢谢。

1个回答

1

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

2) 在 iOS 5.0 之前,实体被存储在 Core Data 中作为无序的 NSSet。如果你的目标是 iOS 4.x,你需要添加一个属性来存储队列中的顺序,这将让你计算出最后添加的项目是哪个。你还需要编写一个方法来搜索实体并返回最高编号的排序属性,以便知道下一个 drivethrough 排序属性要使用什么。如果你只针对 iOS 5.0,你可以将关系标记为有序,这将把它存储为一个 NSOrderedSet。参见:iOS 5.0 的 Core Data 发布说明 - 托管对象

3)-viewWillAppear:中运行数据加载代码取决于生成或加载数据所需的时间。如果它需要相当长的时间,您就不会想同步执行,因为如果代码在-viewWillAppear:中运行,它将阻塞UIKit运行的主线程。 如果时间不是微不足道的(至少在100-200毫秒以下),则需要在后台线程中生成数据,可以在-viewWillAppear:中启动该线程。实现这一点最简单的方法是使用调度队列dispatch_async()


你是不是想要在后台线程中使用-viewDidAppear:方法?还是你真的是想使用-viewWillAppear:方法,但我不理解呢? - Glademist
如果你在 -viewDidAppear: 中加载数据并展示一个活动指示器视图,那么这就不是问题了。但我的担心是,如果加载过程太长,-viewWillAppear: 将一直等待,直到加载代码完成(除非在后台线程中运行)。 - user836263

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接