Not able to save with SwiftData. "The file “default.store” couldn’t be opened."

I get this message when trying to save my Models.


CoreData: error: SQLCore dispatchRequest: exception handling request: <NSSQLSaveChangesRequestContext: 0x303034540> , I/O error for database at /var/mobile/Containers/Data/Application/726ECA8C-6C67-4BFE-89E7-AFD8A83CAA5D/Library/Application Support/default.store.  SQLite error code:1, 'no such table: ZCALENDARMODEL' with userInfo of {



    NSFilePath = "/var/mobile/Containers/Data/Application/726ECA8C-6C67-4BFE-89E7-AFD8A83CAA5D/Library/Application Support/default.store";



    NSSQLiteErrorDomain = 1;



}



SwiftData.DefaultStore save failed with error: Error Domain=NSCocoaErrorDomain Code=256 "The file “default.store” couldn’t be opened." UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/726ECA8C-6C67-4BFE-89E7-AFD8A83CAA5D/Library/Application Support/default.store, NSSQLiteErrorDomain=1}

The App has Recipes and Calendars and the user can select a Recipe for each Calendar day. The recipe should not be referenced, it should be saved by SwiftData along with the Calendar.


import SwiftUI

import SwiftData



enum CalendarSource: String, Codable {

    case created

    case imported

}



@Model

class CalendarModel: Identifiable, Codable {

    var id: UUID = UUID()

    var name: String

    var startDate: Date

    var endDate: Date

    var recipes: [String: RecipeData] = [:]

    var thumbnailData: Data?

    var source: CalendarSource?



    // Computed Properties

    var daysBetween: Int {

        let days = Calendar.current.dateComponents([.day], from: startDate.midnight, to: endDate.midnight).day ?? 0

        return days + 1

    }



    var allDates: [Date] {

        startDate.midnight.allDates(upTo: endDate.midnight)

    }



    var thumbnailImage: Image? {

        if let data = thumbnailData, let uiImage = UIImage(data: data) {

            return Image(uiImage: uiImage)

        } else {

            return nil

        }

    }



    // Initializer

    init(name: String, startDate: Date, endDate: Date, thumbnailData: Data? = nil, source: CalendarSource? = .created) {

        self.name = name

        self.startDate = startDate

        self.endDate = endDate

        self.thumbnailData = thumbnailData

        self.source = source

    }



    // Convenience initializer to create a copy of an existing calendar

    static func copy(from calendar: CalendarModel) -> CalendarModel {

        let copiedCalendar = CalendarModel(

            name: calendar.name,

            startDate: calendar.startDate,

            endDate: calendar.endDate,

            thumbnailData: calendar.thumbnailData,

            source: calendar.source

        )

        // Copy recipes

        copiedCalendar.recipes = calendar.recipes.mapValues { $0 }

        return copiedCalendar

    }



    // Codable Conformance

    private enum CodingKeys: String, CodingKey {

        case id, name, startDate, endDate, recipes, thumbnailData, source

    }



    required init(from decoder: Decoder) throws {

        let container = try decoder.container(keyedBy: CodingKeys.self)

        id = try container.decode(UUID.self, forKey: .id)

        name = try container.decode(String.self, forKey: .name)

        startDate = try container.decode(Date.self, forKey: .startDate)

        endDate = try container.decode(Date.self, forKey: .endDate)

        recipes = try container.decode([String: RecipeData].self, forKey: .recipes)

        thumbnailData = try container.decodeIfPresent(Data.self, forKey: .thumbnailData)

        source = try container.decodeIfPresent(CalendarSource.self, forKey: .source)

    }



    func encode(to encoder: Encoder) throws {

        var container = encoder.container(keyedBy: CodingKeys.self)

        try container.encode(id, forKey: .id)

        try container.encode(name, forKey: .name)

        try container.encode(startDate, forKey: .startDate)

        try container.encode(endDate, forKey: .endDate)

        try container.encode(recipes, forKey: .recipes)

        try container.encode(thumbnailData, forKey: .thumbnailData)

        try container.encode(source, forKey: .source)

    }

}


import SwiftUI



struct RecipeData: Codable, Identifiable {

    var id: UUID = UUID()

    var name: String

    var ingredients: String

    var steps: String

    var thumbnailData: Data?



    // Computed property to convert thumbnail data to a SwiftUI Image

    var thumbnailImage: Image? {

        if let data = thumbnailData, let uiImage = UIImage(data: data) {

            return Image(uiImage: uiImage)

        } else {

            return nil  // No image

        }

    }

    

    init(recipe: RecipeModel) {

        self.name = recipe.name

        self.ingredients = recipe.ingredients

        self.steps = recipe.steps

        self.thumbnailData = recipe.thumbnailData

    }

}


import SwiftUI

import SwiftData



@Model

class RecipeModel: Identifiable, Codable {

    var id: UUID = UUID()

    var name: String

    var ingredients: String

    var steps: String

    var thumbnailData: Data? // Store the image data for the thumbnail

    static let fallbackSymbols = ["book.pages.fill", "carrot.fill", "fork.knife", "stove.fill"]



    // Computed property to convert thumbnail data to a SwiftUI Image

    var thumbnailImage: Image? {

        if let data = thumbnailData, let uiImage = UIImage(data: data) {

            return Image(uiImage: uiImage)

        } else {

            return nil  // No image

        }

    }



    // MARK: - Initializer

    init(name: String, ingredients: String = "", steps: String = "", thumbnailData: Data? = nil) {

        self.name = name

        self.ingredients = ingredients

        self.steps = steps

        self.thumbnailData = thumbnailData

    }



    // MARK: - Copy Function

    func copy() -> RecipeModel {

        RecipeModel(

            name: self.name,

            ingredients: self.ingredients,

            steps: self.steps,

            thumbnailData: self.thumbnailData

        )

    }



    // MARK: - Codable Conformance

    private enum CodingKeys: String, CodingKey {

        case id, name, ingredients, steps, thumbnailData

    }



    required init(from decoder: Decoder) throws {

...
    }



    func encode(to encoder: Encoder) throws {

        var container = encoder.container(keyedBy: CodingKeys.self)

        try container.encode(id, forKey: .id)

        try container.encode(name, forKey: .name)

        try container.encode(ingredients, forKey: .ingredients)

        try container.encode(steps, forKey: .steps)

        try container.encode(thumbnailData, forKey: .thumbnailData)

    }

}

Not able to save with SwiftData. "The file “default.store” couldn’t be opened."
 
 
Q