2014-08-30 23 views
6

Sto scrivendo un gioco iOS in Swift e volevo includere un'etichetta di alto livello alla fine. Penso che la funzione di salvataggio sia corretta, ma quella di carico è quella che mi dà problemi. Ho già creato un soggetto ("BestScores") e gli attributi ("classicBestScoreTF"):CoreData Swift: come salvare e caricare i dati?

Per salvare il record:

var bestscore25 = 1000 
var score: int 

func savescore() {  
    var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) 
    var context:NSManagedObjectContext = appDel.managedObjectContext! 
    var score25: AnyObject! = NSEntityDescription.insertNewObjectForEntityForName("BestScores", inManagedObjectContext: context) as NSManagedObject 
    score25.setValue(score, forKey: "classicBestScoreTF") 
    context.save(nil) 
} 

func loadscore() { 
    var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) 
    var context:NSManagedObjectContext = appDel.managedObjectContext! 
    bestScore25 = valueForKey("classicBestScoreTF") as Int 
} 

func endgame() { 

    if score > bestScore25 { 
     savescore() 
     loadscore() 
     bestScoreLabel.text = "Best Score: \(bestScore25)" 
    } 

    if score < bestscore {    
     loadscore() 
     bestScoreLabel.text = "Best Score: \(bestScore25)" 
    }  
} 

Non funziona :(Si prega di aiutare

+0

si potrebbe iniziare passando e valutare un oggetto errore durante il salvataggio. – vikingosegundo

+0

https://www.youtube.com/watch?v=3IDfgATVqHw&feature=youtu.be – herby

+0

Basta seguire [QUESTO] (http://jamesonquave.com/blog/core-data-in-swift-tutorial-part-1 /), ti fornirà linee guida passo passo. – Shardul

risposta

23

dati di risparmio:

var person = NSEntityDescription.insertNewObjectForEntityForName("Person", 
inManagedObjectContext: self.managedObjectContext!) as Person 
person.name = "Mary" 
person.age = Float(arc4random() % 100) 

var error : NSError? = nil 
if !self.managedObjectContext!.save(&error) { 
    NSLog("Unresolved error \(error), \(error!.userInfo)") 
    abort() 
} 

caricamento dei dati:

var error: NSError? = nil 
var fReq: NSFetchRequest = NSFetchRequest(entityName: "Frases")  
fReq.predicate = NSPredicate(format: "id contains[c] %@", String(day)) 
var sorter: NSSortDescriptor = NSSortDescriptor(key: "id" , ascending: false) 
fReq.sortDescriptors = [sorter] 
fReq.returnsObjectsAsFaults = false 
let result : [AnyObject] = self.managedObjectContext!.executeFetchRequest(fReq, error:&error)! 
+0

Non devi chiamare 'save()' dopo aver inserito un nuovo oggetto? – MarksCode

2

Per il salvataggio dei dati , si dovrebbe utilizzare:

context.insertNewObjectForEntityForName(...) 

E lo stesso quando si sta caricando i dati, dovrebbe essere:

context.valueForKey (...)

Tuttavia, non sono sicuro se questo è anche la sintassi corretta, in quanto potrebbe essere necessario ottenere un array di entità e quindi ottenere l'oggetto all'indice 0. Su quella nota perché stai usando i dati principali per i punteggi più alti? Si potrebbe desiderare di guardare in default dell'utente o icloud, i dati Core è stato progettato più per i database

+0

Se ciò è fonte di confusione, posso fornire un codice di esempio, fammi sapere – steffeydev

+0

non 'context.insertNewObjectForEntityForName ...' ma 'NSEntityDescription.insertNewEntyty: inManagedObjectContext: ...' – Massmaker

Problemi correlati