Iphone 将核心数据与SQLite一起使用-为什么在某些示例中使用Extension:@";momd“;使用了什么?

Iphone 将核心数据与SQLite一起使用-为什么在某些示例中使用Extension:@";momd“;使用了什么?,iphone,objective-c,cocoa-touch,core-data,Iphone,Objective C,Cocoa Touch,Core Data,我正在使用sqlite的核心数据。。我在AppDelegate中的一个就绪应用程序中发现 -(NSManagedObjectModel *) managedObjectModel { if(__managedObjectModel != nil) { return __managedObjectModel; } NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MYSQLite"

我正在使用sqlite的核心数据。。我在AppDelegate中的一个就绪应用程序中发现

-(NSManagedObjectModel *) managedObjectModel
{
    if(__managedObjectModel != nil)
    {
         return __managedObjectModel;
    }
    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MYSQLite" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

    return __managedObjectModel;
}

在本例中,虽然我的SQLite数据库具有.SQLite扩展名。。。此示例具有.momd扩展名。。。。这背后的原因是什么

*.momd不是您的数据文件(SQLite文件),它是您的模型,您在其中创建了存储在coredatafile中的对象

Momd是托管对象模型的缩写


持久存储是设置数据文件的地方,在您的情况下,数据文件是SQLite文件。

*。momd不是您的数据文件(SQLite文件),而是您的模型,您可以在其中创建存储在coredatafile中的对象

Momd是托管对象模型的缩写


持久化存储是设置数据文件的地方,在您的情况下,数据文件是SQLite文件。

核心数据提供了一种体系结构,以支持托管对象模型的版本控制和数据从一个版本迁移到另一个版本


您应该阅读。

核心数据提供了一种支持托管对象模型版本控制和数据从一个版本迁移到另一个版本的体系结构


您应该阅读。

这些
.mom
.momd
文件是编译后的数据模型文件。这些文件与定义SQL数据库模式的文件类似,尽管它们与SQL完全无关,并且可以与任何类型或核心数据持久存储一起使用

数据模型是您在“数据模型编辑器”(data model editor)中创建的,您可以在其中以图形方式定义实体以及实体之间的关系。数据模型定义了对象之间的关系,以便托管对象上下文可以在运行时“管理”对象。预存存储还使用它将对象“冻干”到磁盘上的文件中,以进行持久存储

编译项目时,
.xcdatamodel
文件被编译成
.mom
文件或
.momd
文件。前者用于未版本化模型,后者用于版本化模型。现在,您几乎总是看到
.momd
文件。编译后的文件仅出现在应用程序包中。它不会以项目文件的形式出现,正如编译源代码的
.o
文件出现在项目文件中一样

相比之下,
.sqlite
.plist
或其他文件扩展名是包含应用程序数据的实际持久存储文件。获取的文件类型取决于使用的存储类型。您拥有的已编译模型文件的类型与您使用的持久存储的类型完全无关。几乎所有类型的商店都可以使用相同的模型。唯一的限制是,一旦使用模型创建了存储,您必须使用相同的模型从该点开始访问存储。如果更改模型,则必须将存储迁移到新模型

所以,这个代码:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MYSQLite" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
。。。是完全错误的,因为它混淆了这两种类型的文件。此时,您只需加载数据模型,以便上下文和持久存储区了解数据是如何组合在一起的。通常情况下,代码如下所示:

NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"appNameDataModel" withExtension:@"momd"];
    __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
(还要注意,数据模型文件存储在应用程序包中,因此始终是只读的。)

拥有托管对象模型后,将其提供给持久存储协调器,如下所示:

persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
。。。然后创建或打开实际的持久存储文件,如果使用sqlite存储,则为
.sqlite
文件:

[persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]
持久存储协调器将使用
.momd
文件中的信息来了解在持久存储文件中存储和检索数据时如何配置数据


此外,请确保您了解核心数据不是某种对象SQL包装器。核心数据与SQL无关。SQLite存储只是核心数据可以在后台使用的几种存储类型之一。核心数据的实际操作根本不需要SQL,许多核心数据应用程序根本不使用SQL

.mom
.momd
文件是编译后的数据模型文件。这些文件与定义SQL数据库模式的文件类似,尽管它们与SQL完全无关,并且可以与任何类型或核心数据持久存储一起使用

数据模型是您在“数据模型编辑器”(data model editor)中创建的,您可以在其中以图形方式定义实体以及实体之间的关系。数据模型定义了对象之间的关系,以便托管对象上下文可以在运行时“管理”对象。预存存储还使用它将对象“冻干”到磁盘上的文件中,以进行持久存储

编译项目时,
.xcdatamodel
文件被编译成
.mom
文件或
.momd
文件。前者用于未版本化模型,后者用于版本化模型。现在,您几乎总是看到
.momd
文件。编译后的文件仅出现在应用程序包中。它不会以项目文件的形式出现,正如编译源代码的
.o
文件出现在项目文件中一样

相比之下,
.sqlite
.plist
或其他文件扩展名是包含应用程序数据的实际持久存储文件。获取的文件类型取决于使用的存储类型。您拥有的已编译模型文件的类型与您使用的持久存储的类型完全无关。几乎所有类型的商店都可以使用相同的模型。唯一的限制是,一旦使用模型创建了存储,您必须使用相同的模型从该点开始访问存储。如果更改模型,则必须将存储迁移到新模型。