Iphone Coredata的数据模型是否可以是主捆绑包以外的任何其他捆绑包的一部分
我有一个数据模型文件“Abcde.xcdatamodeld”。它目前是我的主捆绑包的一部分,我使用以下代码引用它Iphone Coredata的数据模型是否可以是主捆绑包以外的任何其他捆绑包的一部分,iphone,ios,core-data,core-data-migration,Iphone,Ios,Core Data,Core Data Migration,我有一个数据模型文件“Abcde.xcdatamodeld”。它目前是我的主捆绑包的一部分,我使用以下代码引用它 - (NSManagedObjectModel *)managedObjectModel { if (managedObjectModel_ != nil) { return managedObjectModel_; } NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"Abcde" ofType:
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel_ != nil) {
return managedObjectModel_;
}
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"Abcde" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return managedObjectModel_;
}
现在我有一个要求,其中“Abcde.xcdatamodeld”应该是不同bundle的一部分,并且应该从新bundle引用`
if (managedObjectModel_ != nil) {
return managedObjectModel_;
}
NSBundle *dataModelBundle = [NSBundle bundleWithIdentifier:@"com.product.dataModelBundle"];
NSString *modelPath = [dataModelBundle pathForResource:@"Abcde" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return managedObjectModel_;
}
但我在运行上述代码时遇到崩溃。。我的问题是,
是的,你可以,我不知道包裹是从哪里来的。如果它包含在另一个项目中的xcode项目中,您必须确保您的捆绑包包含在主捆绑包中。 看看这个: 为了快速检查,您可以使用“ShowPackageContent”查看您的应用程序包,并查看包含的包是否存在。 然后,从这里开始,您必须查找包含数据模型的包。 这就是我在一个项目中所做的。最困难的部分是包含外部包。 我想你的代码就快到了
NSBundle *bundle = [NSBundle mainBundle];
NSString *includedModelPath = [bundle pathForResource:@"YourIncludedBundle" ofType:@"bundle"];
NSURL *includedModelURL = [[NSBundle bundleWithPath:includedModelPath] URLForResource:@"DataModel" withExtension:@"momd"];
NSString *documentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSURL *storeUrl = [NSURL fileURLWithPath: [documentsDirectory stringByAppendingPathComponent: dbname]];
self.managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:includedModelURL];
我刚刚复制并粘贴了我的代码,并使其更加详细,以便更好地解释。如果它对您正确,请将其标记为已回答,其他人可能会发现它很有用