基于Core Data的iPhone应用程序的默认数据集

时间:2009-06-10 21:15:08

标签: iphone core-data

我正在编写一个使用Core Data来保存模型的iPhone 3.0应用程序。我希望应用程序安装默认数据集。在为iPhone开发时< 3.0我在运行构建之前使用SQL脚本初始化数据库,然后将准备好的.sqlite文件部署为应用程序资源。 Core Data的最佳方法是什么。

结论:最后我写了一个通用的XML处理程序。元素名称映射到Objective-C类名和属性名。元素中的PCDATA值被转换为在元素命名的属性上声明的类型。子元素或属性元素被解析为对象实例 - 因此通过解析XML文档,构建了对象图。我不得不首先掌握Objective-C运行时: - )

示例目标类:

@interface Widget : NSObject {
@private
    NSString* name;
    NSSet* sprockets;
}
@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSSet* sprockets;
- (void)addSprocketsObject:(Sprocket*)value;    
@end

@interface Sprocket : NSObject {
@private
    NSString* name;
    NSNumber* canFly;
    NSNumber* wheels;
}
@property (nonatomic, retain) NSString* name;
@property (nonatomic, retain) NSNumber* canFly;
@property (nonatomic, retain) NSNumber* wheels;
@end

默认数据示例:

<data>
    <Sprocket id="sprocket-1">
        <name>Sprocket1</name>
        <wheels>4</wheels>
    </Sprocket>
    <Widget id="widget-1">
        <name>MyWidget</name>
        <sprockets>
            <Sprocket ref-id="sprocket-1"/>
            <Sprocket id="sprocket-2">
                <name>Sprocket2</name>
                <canFly/>
            </Sprocket>
            <Sprocket id="sprocket-3">
                <name>Sprocket3</name>
            </Sprocket>
        </sprockets>
    </Widget>
</data>

2 个答案:

答案 0 :(得分:6)

有两种选择:

  1. 从一些合理的数据格式(XML,JSON等)编写导入程序,并在首次运行时将其导入Core Data上下文,然后将上下文保存到持久存储中。
  2. 如果您的应用只需要一个持久性商店,您可以预先填充它并使用您应用的资源部署持久性商店。如果你需要多个持久存储,都预先填充了相同的默认数据,选项1可能会更容易,但你可以使用NSPersistenStoreCoordinator的migratePersistentStore:toURL:options:withType:error :(或iPhone Core Data中的等价物 - - 仍然在NDA下)从预先打开的商店为每个新商店创建新商店。
  3. 根据我的经验,实现选项1的代码与预填充持久存储所需的代码几乎相同,因此可能只有一个选项有两个观点。

答案 1 :(得分:4)

您可以使用Plist存储初始数据并在首次运行时填充持久性存储。这种方法比编写自己的自定义XML解析器更容易。