fatbobman / SwiftDataKit

SwiftDataKit allows SwiftData developers to access Core Data objects corresponding to SwiftData elements.
https://fatbobman.medium.com/swiftdatakit-unleashing-advanced-core-data-features-in-swiftdata-3fcd5f443c99
MIT License
92 stars 6 forks source link

Support for multiple configurations #1

Open marwey opened 9 months ago

marwey commented 9 months ago

Hi, will this extension library also work for the case that the SwiftData ModelContainer is created with multiple configurations? I saw test cases implemented using only one configuration?

fatbobman commented 9 months ago

@marwey Theoretically, it is feasible, but currently, SwiftData has a bug where only the first configuration works, making it impossible to implement multiple stores within one container, similar to Core Data.

marwey commented 9 months ago

@fatbobman Thanks for the heads up! Yes, looks like this part is buggy. The funny thing is, when I peek into my modelContext with the debugger I can see the data of both of my configurations?

fatbobman commented 9 months ago

@marwey Yes, This is a very interesting bug. SwiftData creates a corresponding SQLite file for each configuration, but it only loads the first configuration (corresponding to NSPersistentStoreDescription in Core Data).

I mentioned it in my twitter https://twitter.com/fatbobman/status/1741820272964251751

marwey commented 9 months ago

@fatbobman Yes, that is inline with what I see in my code. And it's actually independent from your library.

Will file a bug report with them and see if I can work around this in my app.

marwey commented 7 months ago

@fatbobman It seems Apple has fixed the above bug. At least the sample I attached to my bug report works in macOS 14.4.

fatbobman commented 7 months ago

@marwey Thanks, I just test it , Yes, It works finally!

marwey commented 1 month ago

@fatbobman My testing under macOS 15 suggests that this kit is broken. I guess Apple removed _nsContext from ModelContext? Do you see any workarounds for this?

fatbobman commented 1 month ago

@marwey 😭

Due to adjustments in the storage logic, SwiftDataKit is no longer applicable to SwiftData following WWDC 2024. For more details, please read SwiftData in WWDC 2024: The Revolution Continues, Stability Still Awaits.

image
marwey commented 1 month ago

@fatbobman Many thanks for confirming and dive deep into this in the attached article. Very valuable!

I guess for dynamic queries I can transform my code to SwiftData. I am concerned about batch inserts. When I tried with SwiftData it was very slow. The Core Data API was so much faster. Any best practices you can share on that one?

fatbobman commented 1 month ago

@marwey you can use Core Data Batch Operation in a SwiftData project. but , you need to handle relationships manually. // code snippet https://gist.github.com/fatbobman/17334937ecf6772fa3586fc2ba1fc852

https://fatbobman.com/en/posts/batchprocessingincoredata/