Search code examples
iosswiftcore-datastruct

How do I store a Swift struct in Core Data on iOS?


At the moment I'm storing one of my classes as NSData in a plist and obviously that isn't a good way to do it.

So I'm trying to set up Core Data, but my class has Structs. This is what I have:

import Foundation
import CoreData

class Favourite: NSManagedObject {
    @NSManaged var origin: Stop

    struct Stop {
        var name: String;
        var id: String;
    }
}

But this is no good because it says:

Property cannot be marked as @NSManaged because its type cannot be represented in Objective-C

Furthermore, if this error did not occur, I don't know what I'd set it up as in my xcdatamodeld file.

I guess I could store the values in the struct and assign on initialisation of the object? Is this the most optimal/clean way?


Solution

  • I will proceed like this :

    import Foundation
    import CoreData
    
        struct Stop {
           var name: String;
           var id: String;
        }
    
        class Favourite: NSManagedObject {
    
            @NSManaged var name: String
            @NSManaged var id: String
    
            var stop : Stop {
               get {
                    return Stop(name: self.name, id: self.id)
                }
                set {
                    self.name = newValue.name
                    self.id = newValue.id
                }
             }
        }
    

    Very interesting article, you should read: http://www.jessesquires.com/better-coredata-models-in-swift/