1

我正在尝试归档轻量级迁移,然后进行一些处理。我已经完成了轻量级流程,现在我需要一些帮助来处理我的实体。

在旧模型上,我曾经有一个实体“Car”,现在我添加了实体“Person”,关系为 Person has Cars。

因此,在轻量级迁移之后,我需要添加一个默认人“John”并将所有汽车添加给他。

有人有什么想法吗?

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreData.sqlite"];

    NSError *error = nil;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    NSDictionary *options = @{
                              NSMigratePersistentStoresAutomaticallyOption : @YES,
                              NSInferMappingModelAutomaticallyOption : @YES
                              };


    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return _persistentStoreCoordinator;
}
4

2 回答 2

2

如果要发生轻量级迁移,您可以捕捉到。有关详细信息,请参阅答案。在那里,您可以设置一个标志,并基于该标志在正常启动后执行一个方法,您可以在其中插入所需的实体。

但是请注意,轻量级迁移应该将所有现有实体迁移到新的商店版本,因此通常没有逻辑上令人信服的理由来使用这个钩子。相反,您只需查询您的(新版本或旧版本)商店是否包含“约翰”和他的汽车,如果没有则插入它们。

于 2013-05-09T13:16:01.870 回答
0

如果这是对数据库的一次性升级,那么使用自定义迁移策略类而不是轻量级迁移可能更有意义。这是关于自定义该过程的一个很好的教程:http: //9elements.com/io/index.php/customizing-core-data-migrations/

如果您想将一对模型的推断迁移与另一对模型之间的自定义迁移混合,我已经编写了有关所涉及的核心数据方法和示例迭代迁移类的描述。

于 2013-07-23T21:43:47.890 回答