Iphone Coredata的数据模型是否可以是主捆绑包以外的任何其他捆绑包的一部分

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:

我有一个数据模型文件“Abcde.xcdatamodeld”。它目前是我的主捆绑包的一部分,我使用以下代码引用它

- (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];
    

    我刚刚复制并粘贴了我的代码,并使其更加详细,以便更好地解释。

    如果它对您正确,请将其标记为已回答,其他人可能会发现它很有用