I'm trying to perform a SwiftData insert from my share extension. Both app and extension are in the same App Group. I'm using the same container for both:
public func ConfigureModelContainer() -> ModelContainer {
let schema = Schema([Yerl.self, Category.self])
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
do {
return try ModelContainer(for: schema, configurations: [modelConfiguration])
} catch {
fatalError(error.localizedDescription)
}
}
and in the extension I save like this:
private func saveAction() {
let container = ConfigureModelContainer()
let modelContext = ModelContext(container)
if let defaultCategory = getDefaultCategory(container: container) {
let foo = Foo(name: text, note: "", url: url, category: defaultCategory)
modelContext.insert(foo)
do {
try modelContext.save()
} catch {
print("Error: can't save model context: \(error.localizedDescription)")
}
}
contextpleteRequest(returningItems: [])
}
When I execute the line with the insertion the app goes away for about 13 seconds and then
Thread 1: EXC_BAD_ACCESS (code=2, address=0x16a6bbfd0)
Am I doing something unsupported? The console is silent. Access to the paramters to Foo are fine, I've tried this with local text and url arguments with the same result.
Edit: I'm fetching successfully, it's the insert that's not working.
I'm trying to perform a SwiftData insert from my share extension. Both app and extension are in the same App Group. I'm using the same container for both:
public func ConfigureModelContainer() -> ModelContainer {
let schema = Schema([Yerl.self, Category.self])
let modelConfiguration = ModelConfiguration(schema: schema, isStoredInMemoryOnly: false)
do {
return try ModelContainer(for: schema, configurations: [modelConfiguration])
} catch {
fatalError(error.localizedDescription)
}
}
and in the extension I save like this:
private func saveAction() {
let container = ConfigureModelContainer()
let modelContext = ModelContext(container)
if let defaultCategory = getDefaultCategory(container: container) {
let foo = Foo(name: text, note: "", url: url, category: defaultCategory)
modelContext.insert(foo)
do {
try modelContext.save()
} catch {
print("Error: can't save model context: \(error.localizedDescription)")
}
}
contextpleteRequest(returningItems: [])
}
When I execute the line with the insertion the app goes away for about 13 seconds and then
Thread 1: EXC_BAD_ACCESS (code=2, address=0x16a6bbfd0)
Am I doing something unsupported? The console is silent. Access to the paramters to Foo are fine, I've tried this with local text and url arguments with the same result.
Edit: I'm fetching successfully, it's the insert that's not working.
Share Improve this question edited Feb 18 at 12:00 Spiff asked Feb 17 at 14:52 SpiffSpiff 9039 silver badges10 bronze badges 1 |1 Answer
Reset to default 0I had been following the methodolgy laid out in https://www.merrell.dev/ios-share-extension-with-swiftui-and-swiftdata/ but hadn't followed it exactly. It turns out if I pass the newly constructed container from the ViewController to the SwiftUI view like this:
let contentView = UIHostingController(rootView: ShareView(context: context).modelContainer(modelContainer))
then in the SwiftUI view @Environment(.modelContext) private var modelContext
yields a good ModelContext. I'm scratching my head a little, but it works.
saveAction()
– workingdog support Ukraine Commented Feb 17 at 23:04