6

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

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

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

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

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

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

4

2 回答 2

18

此处可能重复。

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

- (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;
 }
于 2013-04-22T11:43:35.300 回答
-3

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

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

于 2013-04-22T11:44:40.377 回答