Reputation: 17685
I have a workspace containing the following structure:
Workspace:
-- SomeApp
-- SomeFramework
---- DataService.swift
---- FrameworkModel.xcdatamodeld
SomeFramework has been added (Embeded & Sign) to SomeProject.
persistentContainer.viewContext
SomeFramework
import Foundation
import CoreData
public class DataService {
lazy var persistentContainer: NSPersistentContainer = {
let container = NSPersistentContainer(name: "FrameworkModel")
container.loadPersistentStores { description, error in
if let error = error {
fatalError("Unable to load persistent stores: \(error)")
}
}
return container
}()
public init() {
print(persistentContainer.viewContext) //Crashes here because "Failed to load model named FrameworkModel"
}
}
Upvotes: 4
Views: 751
Reputation: 17685
Need to specify the framework bundleID and model name:
let frameworkBundleID = "com.frameworkBundleID"
let modelName = "FrameworkModel"
lazy var persistentContainer: NSPersistentContainer = {
let frameworkBundle = Bundle(identifier: self.frameworkBundleID)
let modelURL = frameworkBundle!.url(forResource: self.modelName, withExtension: "momd")!
let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL)
let container = NSPersistentContainer(name: self.modelName, managedObjectModel: managedObjectModel!)
container.loadPersistentStores { storeDescription, error in
if let error = error {
fatalError("Unable to load persistent stores: \(error)")
}
}
return container
}()
Big thanks to https://medium.com/@yoellev8/sharing-a-core-data-model-with-a-swift-framework-5d191ccec99e
Upvotes: 11