【问题标题】:Core Data Project template questions in XCode 4XCode 4 中的核心数据项目模板问题
【发布时间】:2011-07-26 10:43:09
【问题描述】:

我在 XCode 4 中使用 Core Data 创建了一个基于窗口的 iPhone 应用程序。关于核心数据位,我有一些问题:

  1. 在应用程序委托头文件中没有3个核心数据属性不作为实例变量出现?即@interface 部分中没有列出任何变量,但是它们有属性并且它们在实现文件中合成。这是正确的吗?

  2. 在默认的持久化机制SQLite中?我在“persistentStoreCoordinator”方法中看到 storeURL 是“...URLByAppendingPathComponent:@"CoreDataProjectTemplate.sqlite"

  3. 实际的 sqlite 持久性文件将在何时何地创建?我在模板的代码中看不到这是哪里?你必须添加自己的代码来创建它吗?

【问题讨论】:

    标签: iphone xcode core-data xcode4 xcode-template


    【解决方案1】:
    1. 现代 Objective-C 运行时不仅可以合成访问器,还可以合成属性存储。如果您愿意,您可以自己指定支持您的属性的 ivars,或者您可以让运行时自行解决。

    2. SQLite 是 iOS 中唯一支持 Core Data 的后备存储。

    3. 如果我没记错的话,当托管对象上下文被保存时,该文件将被创建(如果它不存在)。该 URL 在添加到持久存储协调器时与持久存储关联。

    【讨论】:

      【解决方案2】:

      1 我假设您指的是以下内容:

      @synthesize managedObjectContext=__managedObjectContext;
      @synthesize managedObjectModel=__managedObjectModel;
      @synthesize persistentStoreCoordinator=__persistentStoreCoordinator;
      

      此格式允许您为不同名称的变量创建访问器(即 getter / setter 访问器名称可以与变量名称不同)。如果变量之前没有定义,那么综合操作会自动为你创建一个综合实例变量。

      2 正如您从文件名中推断的那样,CoreData 的默认持久存储是 SQLite;但是它不限于这一种类型。第一次创建持久存储时,您向persistentStoreCoordinator 发送消息,在其中将addPersistentStoreWithType 设置为以下之一:

      NSSQLiteStoreType
      NSBinaryStoreType
      NSInMemoryStoreType
      

      说实话,除非你有充分的理由改变它,否则你最好还是坚持使用 SQLite。

      3 持久存储的位置 URL 是通过建立应用程序在其中执行的目录(向 applicationDocumentsDirectory 发送消息 - 写在代码中的其他位置)然后通过 URLByAppendingPathComponent 参数附加持久存储的文件名来构建的.您可以根据需要修改它以添加子文件夹或更改文件名。

      【讨论】:

        【解决方案3】:

        3) storeURL 是 Core Data 数据库的名称和位置。如果你想把它放在其他地方,只需更改基本目录。您可能需要考虑应用程序支持目录。

        【讨论】:

          猜你喜欢
          • 2011-08-30
          • 1970-01-01
          • 2011-10-05
          • 2011-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-04
          相关资源
          最近更新 更多