【问题标题】:Default dataset for Core Data based iPhone application基于 Core Data 的 iPhone 应用程序的默认数据集
【发布时间】:2010-11-01 23:12:42
【问题描述】:

我正在编写一个使用 Core Data 来持久化模型的 iPhone 3.0 应用程序。我希望使用默认数据集安装该应用程序。在为 iPhone

结论:最后我写了一个通用的 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>

【问题讨论】:

  • 我一直在从 plist 运行的第一个应用程序上填充 coredata 数据库,导致第一次运行加载时间很长。我一直看到人们说“使用您在应用程序包中生成的预填充 .sqlite 数据库”。 CoreData 书籍示例向您展示了如何在找到 .sqlite 文件后使用它,但它首先在哪里?我在这里找到了答案:ablogontech.wordpress.com/2009/07/13/…

标签: iphone core-data


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我想到了两个选项:

    1. 从某种合理的数据格式(XML、JSON 等)编写导入器,并在首次运行时将其导入您的 Core Data 上下文,然后将上下文保存到持久存储中。
    2. 如果您的应用只需要一个持久存储,您可以预先填充它并使用应用的资源部署持久存储。如果您需要多个持久性存储,所有这些都预先填充了相同的默认数据,选项 1 可能会更容易,但您可以使用 NSPersistenStoreCoordinator 的 migratePersistentStore:toURL:options:withType:error: (或 iPhone Core Data 中的等效项 - - 仍处于 NDA 下)为每个需要的新商店从预装商店创建新商店。

    根据我的经验,实现选项 1 的代码与预填充持久性存储所需的代码几乎相同,因此也许真的只有一个选项具有两种观点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-16
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      相关资源
      最近更新 更多