核心数据在运行时添加实体

时间:2012-10-30 05:01:31

标签: objective-c core-data

我正在重写这个问题,以帮助澄清和删除我编写的许多实际上没有帮助的代码。

我正在使用.xcdatamodel作为我的初始架构,但我需要在运行时向我的架构添加实体,因此我需要添加一个新的NSManagedObjectModel并复制现有实体,然后添加新实体。

如果我首先创建一个新的NSPersistantStore,然后让我的NSMigrationManager进行迁移,我会收到一个错误,指出它不能将源模型移动到目标路径,因为文件已经存在。

如果我只是要求我的NSMigrationManager进行迁移,那么它只会在没有任何错误代码或调试器中的任何内容的情况下崩溃。

NSMappingModel *mappingModel = [NSMappingModel inferredMappingModelForSourceModel:originalModel destinationModel:newModel error:&error];
NSMigrationManager *manager = [[NSMigrationManager alloc] initWithSourceModel:originalModel destinationModel:newModel];

if (![manager migrateStoreFromURL:[originalStore URL]
                             type:NSSQLiteStoreType
                          options:[self autoMigrationOptions]
                 withMappingModel:mappingModel
                 toDestinationURL:[NSPersistentStore MR_urlForStoreName:[self nextStoreName]]
                  destinationType:NSSQLiteStoreType
               destinationOptions:[self autoMigrationOptions]
                            error:&error])
{
    return NO;
}

URL很好,当我将它登录到控制台,管理器存在等时,映射模型看起来很好。在这种情况下我还没有创建NSPersistantStore,但根据NSMigrationManager类引用,如果商店确实存在目标网址不存在,则会自动创建一个。

任何人都有线索?

0 个答案:

没有答案