【问题标题】:What's the difference between the 5 Magical Record setup methods?5种Magical Record设置方法有什么区别?
【发布时间】:2012-11-03 16:14:12
【问题描述】:

谁能对这 5 种设置方法中的每一种进行说明?

(void) setupCoreDataStack;
(void) setupAutoMigratingDefaultCoreDataStack;
(void) setupCoreDataStackWithInMemoryStore;
(void) setupCoreDataStackWithStoreNamed:(NSString *)storeName;
(void) setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(NSString *)storeName;

他们各自做什么以及各自的用例是什么?

【问题讨论】:

    标签: objective-c ios database core-data magicalrecord


    【解决方案1】:
    setupCoreDataStack
    

    在您刚开始使用 MagicalRecord 时使用它。正如方法所述,这将设置您的默认核心数据堆栈。堆栈的各个部分是众所周知的,包括:NSPersistentStore、NSPersistentStoreCoordinate、NSManagedObjectModel 和一个默认的 NSManagedObjectContext。为了使 Core Data 正常工作,必须至少对其中的每一个进行实例化和配置。 MagicalRecord 提供了这种单一方法来使用位于 /Library/Application Support//.sqlite 中的 SQLite 持久存储来配置堆栈

    setupAutoMigratingDefaultCoreDataStack
    

    当您对模型进行版本化时,您需要迁移数据。此方法将与之前的(上述)方法执行相同的操作,但也会启用自动迁移。

    setupCoreDataStackWithInMemoryStore;
    

    有时,例如在您编写单元测试时,您希望您的数据在应用终止时消失。此方法还将设置一个 CoreData 堆栈(如上所述),但它不是 SQLite 存储,而是在系统内存 (RAM) 中创建一个持久存储。

    setupCoreDataStackWithStoreNamed:(NSString *)storeName
    

    有时您希望自定义数据所在的文件名。此方法与第一种方法相同,即设置核心数据堆栈,并在特定位置放置一个 SQLite 存储,但存储名称为 storeName.sqlite,而不是 .sqlite

    setupCoreDataStackWithAutoMigratingSqliteStoreNamed:(NSString *)storeName
    

    这与上述方法相同,但也启用了自动迁移。当您对模型进行版本化并且只需启用一个简单的迁移时,您就需要这样做。

    您可以在Apple's Core Data Reference Documentation 上阅读更多有关核心数据迁移的信息

    【讨论】:

    • 如何将 xcdatamodeld 文件关联到 MagicalRecord? MagicalRecord 会尊重 xcdatamodeld 属性,例如“存储在外部记录文件中”吗?
    • 默认情况下,MagicalRecord 将使用带 nil 参数的 mergeModelsFromBundle: 方法。这也在 Xcode 提供的(可怕的)样板代码中。这会自动为您计算出来。有额外的帮助器可以在需要时指定模型文件(单元测​​试是另一个需要这样做的常见地方)
    • 我还是有点迷茫...mergedModelsFromBundle 会自动扫描项目结构中的 xcdatamodeld 文件吗?如果您有多个 xcdatamodeld 会怎样?您在这些 xcdatamodeld 文件中声明的实体(及其属性)是否需要与您为 MagicalRecord 子类化的 NSManagedObjects 匹配?
    • 另外,是否需要使用 MagicalRecord 进行 xcdatamodeld 建模?我可以仅从 NSManagedObject 子类本身设置“存储在外部记录文件中”属性吗?
    • 描述很少,但 NSManagedObjectModel 的文档会告诉你到底发生了什么,即它知道如何查找捆绑包中的所有模型并将它们合并到一个模型中 developer.apple.com/library/mac/documentation/Cocoa/Reference/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 2019-03-31
    • 2014-05-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多