jeudi 5 novembre 2015

Persistent data storage swift

I'm currently working on an iOS app. I save some datas in NSManageObjectContext. During the current session, the datas are accessible in the model but, when I relaunch the app datas are not present anymore.

In my AppDelegate.swift :

private lazy var _managedObjectModel: NSManagedObjectModel? = {
    if let modelURL = NSBundle.mainBundle().URLForResource("Model", withExtension: "momd") {
        return NSManagedObjectModel(contentsOfURL: modelURL)
    } else {
        return nil
    }
}()
private lazy var _persistentStoreCoordinator: NSPersistentStoreCoordinator? = {
    if let managedObjectModel = self._managedObjectModel {
        let coordinator = NSPersistentStoreCoordinator(managedObjectModel: managedObjectModel)

        if let url = self._applicationDocumentsDirectory?.URLByAppendingPathComponent("my.sqlite") {
            var error: NSError?

            coordinator.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: url, options: nil, error: &error)
            if let error = error {
                ErrorManager.defaultManager().showFatalError(title: "Error: Core Data", message: Constants.LocalizedDownloadItAgain)
            } else {
                return coordinator
            }
        }
    }
    return nil
}()
lazy var managedObjectContext: NSManagedObjectContext? = {
    let managedObjectContext = NSManagedObjectContext()

    if let coordinator = self._persistentStoreCoordinator {
        managedObjectContext.persistentStoreCoordinator = coordinator
        return managedObjectContext
    } else {
        return nil
    }
}()

And in my CustomClass when I Store Data :

private init() {
    var error: NSError?
    let request = NSFetchRequest(entityName: "BackingTracks")

    request.sortDescriptors = [NSSortDescriptor(key: "position", ascending: true)]
    if let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate {
        if let managedObjectContext = appDelegate.managedObjectContext {
            if let backingTracks = managedObjectContext.executeFetchRequest(request, error: &error) as? [BackingTrack] {
                if error == nil {
                    if backingTracks.count == 0 {
                        let object = NSEntityDescription.insertNewObjectForEntityForName("BackingTracks", inManagedObjectContext: managedObjectContext) as? BackingTrack
                        object?.name = "test"
                        object?.code = "test"
                        object?.data = nil
                    }
                } else {
                    ErrorManager.defaultManager().showFatalError(title: "Error: Core Data", message: error!.localizedFailureReason)
                }
            }
        }
    }
}

But the variable backingTracks

backingTracks = managedObjectContext.executeFetchRequest(request, error: &error)

is always empty when I relaunch the App.

Do you have any Idea ?

Aucun commentaire:

Enregistrer un commentaire