Search code examples
iosswiftcore-datadatamodel

Swift: CoreData error and how to set up entities and DataModels?


So far I can create my own Data Models in a swift file. Something like:

User.swift:

class User {
    var name: String
    var age: Int

    init?(name: String, age: Int) {
        self.name = name
        self.age = age
    }
}

When I create a Core Data model, ie. a UserData entity, (1) do I have to add the same number of attributes as in my own data model, so in this case two - the name and age? Or (2) can it has just one attribute eg. name (and not age)?

My core data model:

UserData

  • name
  • age

The second problem I have is that when I start the fetch request I get a strange error in Xcode. This is how I start the fetchRequest (AppDelegate is set up like it is suggested in the documentation):

var users = [User]()
var managedObjectContext: NSManagedObjectContext!
...

func loadUserData() {

    let dataRequest: NSFetchRequest<UserData> = UserData.fetchRequest()

    do {
        users = try managedObjectContext.fetch(dataRequest)
    ....
    } catch {
        // do something here
    }
}

The error I get is "Cannot assign values of type '[UserData] to type [User].

What does this error mean? In the official documentation are some of the errors described, but not this particularly one.


Solution

  • You cannot use custom (simple) classes as Core Data model.

    Classes used as Core Data model must be a subclass of NSManagedObject.

    If your entity is named UserData you have to declare the array

    var users = [UserData]()
    

    The User class is useless.