是否有可能有多个核心数据模型文件到一个单一的Xcode项目? [重复](is it possib

2019-08-31 18:43发布

这个问题已经在这里有一个答案:

  • 是否有可能有一个iOS应用多核心数据“数据库”? 2个回答

我工作的地方我处理核心数据的iPad应用程序。

由该应用程序所管理的数据可以分为两大类。

  • 所述第一类型的数据是特定于仅仅该设备或应用。
  • 而的数据需求中具有相同的应用程序的各种设备synching其他类别。

所以在场景中,我有一个思想在我的项目中的两个模型文件和两个相应的源码文件。 而synching一个sqlite的文件,从而实现synching。

请建议,如果我的做法是正确的和可行的。 如果没有,那么请提出其他解决方案。

请理解这个问题。 我在这里谈论彼此具有不同结构的两个sqlite的文件。 意思是“.xcdatamodel”模型文件

Answer 1:

可能重复这里 。

你可以有任何数量的数据模型,只要您为每个不同的管理对象的背景和妥善管理。

- (NSURL *)applicationDocumentsDirectoryForCoreData
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

//第一个数据模型

NSURL *modelURL1 = [[NSBundle mainBundle] URLForResource:@"1_model" withExtension:@"momd"];
NSURL *storeURL1 = [[self applicationDocumentsDirectoryForCoreData] URLByAppendingPathComponent:@"1_model.sqlite"];
NSError *error = nil;
NSManagedObjectModel *managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL1];
persistentStoreCoordinator1 = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: managedObjectModel];

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

//第二个模型。

 NSURL *modelURL2 = [[NSBundle mainBundle] URLForResource:@"2_model" withExtension:@"momd"];
 NSURL *storeURL2 = [[self applicationDocumentsDirectoryForCoreData] URLByAppendingPathComponent:@"2_model.sqlite"];
 managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL2];
 NSError *error = nil;
 persistentStoreCoordinator2 = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel];

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

尽管采取了商务部的商店,你需要:

//select your store - do that in selectStore or a function like that.
NSPersistentStoreCoordinator *coordinator = [self selectStore];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator:coordinator];
    }

两家店之间的选择。

-(NSPersistentStoreCoordinator *)selectStore
 {
    if(someCondtion? return persistentStoreCoordinator1: persistentStoreCoordinator2;
 }


Answer 2:

我怀疑它是不是更新的时候,你应该使用的plist和商店为所有设备具体的事情的文件。 然后你就可以在一行代码读入字典或阵列。

因此,要回答你的问题,是的,只要你想,你可以有许多coredata文件,但它可以成为维护麻烦



文章来源: is it possible to have multiple core data model files to one single Xcode project? [duplicate]