1

When I try to instantiate a ModelContainer object, I get an error. The error is like this:

Thread 1: Fatal error: Composite Coder only supports Keyed Container.

SingleFolder is a custom model.

This is my code:

class DatabaseService {
    static var shared = DatabaseService()
    
    var container: ModelContainer?
    var context: ModelContext?
    
    init() {
        do {
            container = try ModelContainer(for: [SingleFolder.self])
            if let container {
                context = ModelContext(container)
            }
        } catch {
            print(error)
        }
    }
}

enter image description here

I'm expecting to generate a ModelContainer singleton so I can access it anytime. What's wrong with this?

Xcode version 15.0 beta4 Simulator version: iOS 17.0

This is my model:

@Model class SingleFolder {
    let creationTime: Date
    var editTime: Date
    var folderName: String
    
    var frame: CGRect = CGRect.zero

    init(creationTime: Date, editTime: Date, folderName: String) {
        self.creationTime = creationTime
        self.editTime = editTime
        self.folderName = folderName
    }
}
HangarRash
  • 7,314
  • 5
  • 5
  • 32
ikunhub
  • 73
  • 1
  • 7

1 Answers1

1

The problem seems to be that the initial value of a CGRect object cannot be provided in the model.

this works:

@Model class SingleFolder {
    let creationTime: Date
    var editTime: Date
    var folderName: String
    
    var frame: CGRect

    init(creationTime: Date, editTime: Date, folderName: String, frame: CGRect) {
        self.creationTime = creationTime
        self.editTime = editTime
        self.folderName = folderName
        self.frame = frame
    }
}

but this doesn't work:

@Model class SingleFolder {
    let creationTime: Date
    var editTime: Date
    var folderName: String
    
    var frame: CGRect = CGRect.zero

    init(creationTime: Date, editTime: Date, folderName: String) {
        self.creationTime = creationTime
        self.editTime = editTime
        self.folderName = folderName
    }
}

But when I set initial values for other types of properties, it works again:

@Model class SingleFolder {
    let creationTime: Date
    var editTime: Date
    var folderName: String = "this is a folder"
    
    var frame: CGRect

    init(creationTime: Date, editTime: Date, frame: CGRect) {
        self.creationTime = creationTime
        self.editTime = editTime
        self.frame = frame
    }
}
Joakim Danielson
  • 43,251
  • 5
  • 22
  • 52
ikunhub
  • 73
  • 1
  • 7