JohnEstropia / CoreStore

Unleashing the real power of Core Data with the elegance and safety of Swift
MIT License
4k stars 254 forks source link

Can't save records #358

Open pingus-nikalex opened 4 years ago

pingus-nikalex commented 4 years ago

I will try to save records with type:

Here is model:

import UIKit import CoreData

class WindEntity: NSManagedObject { @NSManaged var wind_id:String @NSManaged var latitude:Double @NSManaged var longitude:Double

func setInitialValues() {
    self.latitude = Double(arc4random_uniform(180)) - 90
    self.longitude = Double(arc4random_uniform(360)) - 180
    self.wind_id = NSUUID().uuidString.lowercased()
}

var coordinate: CLLocationCoordinate2D {
    get {

        return CLLocationCoordinate2DMake(
            self.latitude,
            self.longitude
        )
    }
    set {

        self.latitude = newValue.latitude
        self.longitude = newValue.longitude
    }
}

}

Save code:

class DBManager: NSObject {

static let sharedManager = DBManager()

let dataStack = DataStack(xcodeModelName: "Hunt")

private override init() {
    super.init()
    let migrationProgress = dataStack.addStorage(
        SQLiteStore(
            fileName: "Hunt.sqlite",
            configuration: "Default",
            localStorageOptions: .recreateStoreOnModelMismatch // optional. Provides settings that tells the DataStack how to setup the persistent store
        ),
        completion: { (result) -> Void in
            switch result {
            case .success(let storage):
                print("Successfully added sqlite store: \(storage)")
            case .failure(let error):
                print("Failed adding sqlite store with error: \(error)")
            }
        }
    )
    CoreStoreDefaults.dataStack = dataStack
  }

func saveWindModel(weather:WeatherModel) {
    dataStack.perform(
        asynchronous: { (transaction) -> Void in
            let wind = transaction.create(Into<WindEntity>())
            wind.setInitialValues()
            wind.coordinate = weather.location!.coordinate

            print("wind: \(wind) isUpdated \(wind.isUpdated)")
        },
        completion: { (result) -> Void in
            switch result {

            case .success:
                let people = try! self.dataStack.fetchAll(From<WindEntity>())
                print("people \(people)")

            case .failure(let error): print(error)

            }
        }
    )
}

}

After saving I will try to fetch items and have data: )

wind: <Hunt.WindEntity: 0x600001f047d0> (entity: WindEntity; id: 0x600003f9c840 <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/tC3C3F593-3CF5-4E41-B791-9C652B8CFDD42>; data: { latitude = "50.48147854721918"; longitude = "43.66070977143403"; "wind_id" = "3f6562d4-d92a-4f05-af28-6953a8eaaf21"; }) isUpdated false people [<Hunt.WindEntity: 0x600001f3c820> (entity: WindEntity; id: 0x865fe1853c3e059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p7>; data: ), <Hunt.WindEntity: 0x600001f3ca50> (entity: WindEntity; id: 0x865fe1853c02059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p8>; data: ), <Hunt.WindEntity: 0x600001f3cdc0> (entity: WindEntity; id: 0x865fe1853c06059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p9>; data: ), <Hunt.WindEntity: 0x600001f3cd20> (entity: WindEntity; id: 0x865fe1853c0a059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p10>; data: ), <Hunt.WindEntity: 0x600001f3cbe0> (entity: WindEntity; id: 0x865fe1853c0e059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p11>; data: ), <Hunt.WindEntity: 0x600001f3ceb0> (entity: WindEntity; id: 0x865fe1853c12059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p12>; data: ), <Hunt.WindEntity: 0x600001f3cf00> (entity: WindEntity; id: 0x865fe1853c16059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p13>; data: ), <Hunt.WindEntity: 0x600001f3cf50> (entity: WindEntity; id: 0x865fe1853c1a059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p14>; data: ), <Hunt.WindEntity: 0x600001f3cfa0> (entity: WindEntity; id: 0x865fe1853c1e059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p15>; data: ), <Hunt.WindEntity: 0x600001f3cff0> (entity: WindEntity; id: 0x865fe1853c62059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p16>; data: ), <Hunt.WindEntity: 0x600001f3d040> (entity: WindEntity; id: 0x865fe1853c66059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p17>; data: ), <Hunt.WindEntity: 0x600001f3d090> (entity: WindEntity; id: 0x865fe1853c6a059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p18>; data: ), <Hunt.WindEntity: 0x600001f3d0e0> (entity: WindEntity; id: 0x865fe1853c6e059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p19>; data: ), <Hunt.WindEntity: 0x600001f3d130> (entity: WindEntity; id: 0x865fe1853c72059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p20>; data: ), <Hunt.WindEntity: 0x600001f3d180> (entity: WindEntity; id: 0x865fe1853c76059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p21>; data: ), <Hunt.WindEntity: 0x600001f3d1d0> (entity: WindEntity; id: 0x865fe1853c7a059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p22>; data: ), <Hunt.WindEntity: 0x600001f3d220> (entity: WindEntity; id: 0x865fe1853c7e059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p23>; data: ), <Hunt.WindEntity: 0x600001f3d270> (entity: WindEntity; id: 0x865fe1853c42059b <x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p24>; data: )]

What I do wrong?

JohnEstropia commented 4 years ago

I'm not sure what the problem is. Your logs seem to show that print("people \(people)") is properly displaying the objects you created:

people [<Hunt.WindEntity: 0x600001f3c820> (entity: WindEntity; id: 0x865fe1853c3e059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p7; data: ), <Hunt.WindEntity: 0x600001f3ca50> (entity: WindEntity; id: 0x865fe1853c02059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p8; data: ), <Hunt.WindEntity: 0x600001f3cdc0> (entity: WindEntity; id: 0x865fe1853c06059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p9; data: ), <Hunt.WindEntity: 0x600001f3cd20> (entity: WindEntity; id: 0x865fe1853c0a059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p10; data: ), <Hunt.WindEntity: 0x600001f3cbe0> (entity: WindEntity; id: 0x865fe1853c0e059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p11; data: ), <Hunt.WindEntity: 0x600001f3ceb0> (entity: WindEntity; id: 0x865fe1853c12059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p12; data: ), <Hunt.WindEntity: 0x600001f3cf00> (entity: WindEntity; id: 0x865fe1853c16059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p13; data: ), <Hunt.WindEntity: 0x600001f3cf50> (entity: WindEntity; id: 0x865fe1853c1a059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p14; data: ), <Hunt.WindEntity: 0x600001f3cfa0> (entity: WindEntity; id: 0x865fe1853c1e059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p15; data: ), <Hunt.WindEntity: 0x600001f3cff0> (entity: WindEntity; id: 0x865fe1853c62059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p16; data: ), <Hunt.WindEntity: 0x600001f3d040> (entity: WindEntity; id: 0x865fe1853c66059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p17; data: ), <Hunt.WindEntity: 0x600001f3d090> (entity: WindEntity; id: 0x865fe1853c6a059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p18; data: ), <Hunt.WindEntity: 0x600001f3d0e0> (entity: WindEntity; id: 0x865fe1853c6e059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p19; data: ), <Hunt.WindEntity: 0x600001f3d130> (entity: WindEntity; id: 0x865fe1853c72059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p20; data: ), <Hunt.WindEntity: 0x600001f3d180> (entity: WindEntity; id: 0x865fe1853c76059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p21; data: ), <Hunt.WindEntity: 0x600001f3d1d0> (entity: WindEntity; id: 0x865fe1853c7a059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p22; data: ), <Hunt.WindEntity: 0x600001f3d220> (entity: WindEntity; id: 0x865fe1853c7e059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p23; data: ), <Hunt.WindEntity: 0x600001f3d270> (entity: WindEntity; id: 0x865fe1853c42059b x-coredata://E6238499-1013-4BAC-A8A9-460447C25A79/WindEntity/p24; data: )]