2013-05-09 92 views
1

我试图归档轻量级迁移后的一些处理。我已经做了轻量级的过程,我现在需要一些帮助来处理我的实体。CoreData轻量级迁移+自定义

在旧模型上,我曾经有一个实体“汽车”,现在我添加实体“人”的关系人有汽车。

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

有没有人有一些想法?

- (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; 
} 

回答

2

如果轻量级迁移即将发生,您可以捕获。详情请见this回答。在那里你可以设置一个标志,并在正常启动之后执行一个方法,插入所需的实体。

注意,虽然,轻量级迁移需要迁移的所有现有实体新店版本,所以通常有没有逻辑上令人信服的理由用这个钩子。相反,如果包含“约翰”和他的汽车,并且如果不包含,他们会冷查询您的(新版或旧版)商店。

+0

感谢您的帮助。如果将来我做了我的模型的另一个版本呢?有什么方法可以跟踪?就像,如果我升级到V2插入约翰,如果升级到V3插入文森特? – 2013-05-09 16:14:07

+0

是的,您可以随时查询“NSObjectModel”的版本,如其他答案中所述。 – Mundi 2013-05-09 22:45:28