gpt4 book ai didi

ios - Core Data和Restkit简单轻量级迁移报错

转载 作者:行者123 更新时间:2023-11-28 22:19:08 24 4
gpt4 key购买 nike

我正在将 Restkit .20 集成到一个现有的 iOS 应用程序中,并(看似)正确设置所有内容并使用我的初始模型。创建新对象、存储它们、检索它们等等,都在工作。在我使用 restkit/code 数据部署这个新版本的应用程序之前,我想测试一个简单的轻量级迁移以确保 future 的更改能够正常工作,但是当我这样做时,我总是会收到“找不到源存储模型”错误创建我的持久存储。这是我的 reskit 设置代码:

- (void)setupRestKit {
// set up the managed object and set the serialization type to json
_objectManager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", [self getServerBase]]]];
[_objectManager setRequestSerializationMIMEType:RKMIMETypeJSON];

// create our managed object models and store, and set the store on the manager
NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];
RKManagedObjectStore *managedObjectStore = [[RKManagedObjectStore alloc] initWithManagedObjectModel:managedObjectModel];
_objectManager.managedObjectStore = managedObjectStore;

<...all of my entity mapping and response descriptor code is here...>

// tell our store to create a persistent store coordinator
[managedObjectStore createPersistentStoreCoordinator];

// create the path to the database
NSString *storePath = [RKApplicationDataDirectory() stringByAppendingPathComponent:@"<path>.sqlite"];

NSError *error;

// these options allow for lightweight migration
NSDictionary *options = @{
NSMigratePersistentStoresAutomaticallyOption: @(YES),
NSInferMappingModelAutomaticallyOption: @(YES)
};

// create our sqlite persistent store with this path and options
NSPersistentStore *persistentStore = [managedObjectStore addSQLitePersistentStoreAtPath:storePath fromSeedDatabaseAtPath:nil withConfiguration:nil options:options error:&error];

NSAssert(persistentStore, @"Failed to add persistent store with error: %@", error);

// tell our store to create the object contexts
[managedObjectStore createManagedObjectContexts];

// Configure a managed object cache to ensure we do not create duplicate objects
managedObjectStore.managedObjectCache = [[RKInMemoryManagedObjectCache alloc] initWithManagedObjectContext:managedObjectStore.persistentStoreManagedObjectContext];

为了创建我的数据模型的新版本,我选择了当前模型并转到“编辑器”->“添加模型版本”。复制原始模型后,我向我的一个对象添加了一个字符串属性“test”,通过选择新数据模型并点击 command-n 并选择 NSManagedObject 子类从我的模型中生成新对象。然后我选择了新模型和所有对象并创建了它们。

在创建新模型、更改其中一个对象属性并基于此模型重新创建所有对象后,我更改了文件检查器中的模型版本以匹配我创建的新模型,然后运行项目 -我收到上述错误的地方。有人知道/看到我做错了什么吗?

最佳答案

Tom 是正确的 - 我的问题是:

NSManagedObjectModel *managedObjectModel = [NSManagedObjectModel mergedModelFromBundles:nil];

正如我所说,我的项目非常大,所以我没有意识到其中已经存在数据模型,所以我在设置 Restkit 时创建的托管对象模型试图合并所有它们一起捆绑在一起,这显然行不通。我的解决方案是更改代码,以便我仅使用我用于 Restkit 的特定模型创建托管对象模型,如下所示:

NSString *path = [[NSBundle mainBundle] pathForResource:@"Model" ofType:@"momd"];
NSURL *url = [NSURL fileURLWithPath:path];

NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:url];

现在,如果我想对模型进行更改,我单击我当前使用的模型的最新版本,转到编辑器 -> 添加模型版本,然后将新模型建立在先前模型的基础上。对模型中的对象进行更改后,我将最新模型设为文件检查器中“模型版本”下的“当前”模型,当我运行该项目时,它运行良好!

关于ios - Core Data和Restkit简单轻量级迁移报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888925/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com