核心数据模型文件多核到一个xcode项目是否可行?
我正在研究一个我正在处理核心数据的ipad应用程序。
应用程序pipe理的数据可以分为两类。
- 第一种数据仅适用于该设备或应用程序。
- 而另一类数据需要在具有相同应用的各种设备之间同步。
所以在scnerio中,我想到了在我的项目中有两个模型文件和两个corressponding的sqlite文件。 并同步一个sqlite文件,以实现syching。
请build议,如果我的方法是正确和可行的。 如果没有,那么请build议其他解决scheme。
嘿家伙请尝试理解这个问题。 在这里我正在谈论两个不同结构的sqlite文件。 意思是“.xcdatamodel”模型文件
谢谢。
可能在这里重复。
您可以拥有任意数量的数据模型,只要您为每个数据模型创build不同的托pipe对象上下文并对其进行适当的pipe理。
- (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]; }
两家商店之间的select。
-(NSPersistentStoreCoordinator *)selectStore { if(someCondtion? return persistentStoreCoordinator1: persistentStoreCoordinator2; }
您应该使用plist并将其作为所有设备特定事物的文件存储,因为我怀疑它并不经常更新。 然后你可以在一行代码中将它读入字典或数组中。
所以要回答你的问题,是的,你可以拥有尽可能多的coredata文件,但是它可能会成为一个麻烦