【问题标题】:is it possible to have multiple core data model files to one single Xcode project? [duplicate]一个 Xcode 项目可以有多个核心数据模型文件吗? [复制]
【发布时间】:2013-04-15 07:21:22
【问题描述】:

我正在开发一个 ipad 应用程序,我正在处理核心数据。

应用管理的数据可以分为两类。

  • 第一类数据仅特定于该设备或应用程序。
  • 而其他类别的数据需要在具有相同应用的各种设备之间同步。

所以在场景中,我想到在我的项目中有两个模型文件和两个相应的 sqlite 文件。并同步一个sqlite文件以实现同步。

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

请试着理解这个问题。在这里,我谈论的是两个具有不同结构的 sqlite 文件。表示“.xcdatamodel”模型文件

【问题讨论】:

  • 显然是的!你可以。
  • 但这个问题是关于多个商店文件使用相同的模型,所以它并不是真正的重复。
  • 感谢@MartinR 在我的情况下,要求是两个有多个“.xcdatamodel 文件..”
  • 请提出解决方案
  • 请点赞继续讨论。

标签: iphone ios xcode core-data synchronization


【解决方案1】:

可能重复here

您可以拥有任意数量的数据模型,只要您为每个模型创建不同的托管对象上下文并正确管理它们。

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

在为您想要的商店取出 MOC 时:

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

【讨论】:

  • 我说的是多个 .xcdatamodel 文件.. 是否可能。如果是,那么如何添加?
  • 是的,有可能,.xcdatamodel 文件表示核心数据 sqlite db。所以你可以有多个 .xcdatamodel 文件。
  • 你明白我的意思了吗?请投票至少进行讨论。
  • 老兄,我是第一个支持你的问题的人。正常做,你需要两个 NSManagedObject Model NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"one" withExtension:@"momd"]; managedObjectModel1 = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];另一个带有 NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"two" withExtension:@"momd"]; managedObjectModel2 = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
  • 谢谢哥们...我找不到任何添加 momd 文件的选项。直到现在我只处理 xcdatamodel 文件.. 如何添加 momd 文件
【解决方案2】:

您应该使用 plist 并将其存储为所有设备特定内容的文件,因为我怀疑它不会经常更新。然后就可以在一行代码中读入字典或数组。

所以要回答您的问题,是的,您可以拥有任意数量的 coredata 文件,但维护起来会很麻烦

【讨论】:

  • 我说的是多个 .xcdatamodel 文件.. 是否可能。如果是,那么如何添加?
  • 你明白我的意思了吗?请投票至少进行讨论。
  • 您需要创建两个核心数据对象,即从应用程序委托中删除所有核心数据内容,围绕它创建自己的类并在 f.ex 中启动它们。应用委托。它们可能非常相似,只有文件名需要更改您设置存储对象的位置。要添加新的核心数据映射模型,只需转到 File -> New 并从 Core Data 组中选择它。但是我不能足够强烈地说明你真的不应该这样做,但是你可以添加任意数量的核心数据,这在内存存储中会派上用场。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多