2014-08-30 14 views
6

Tôi đang viết một trò chơi iOS trong Swift và tôi muốn bao gồm nhãn điểm cao ở cuối. Tôi nghĩ rằng chức năng tiết kiệm là chính xác, nhưng tải là một trong đó là cho tôi vấn đề. Tôi đã tạo một thực thể ("BestScores") và các thuộc tính ("classicBestScoreTF"):CoreData Swift: Cách lưu và tải dữ liệu?

Để lưu điểm cao:

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)" 
    }  
} 

Nó không làm việc :(Xin giúp

+0

bạn có thể bắt đầu bằng cách đi vào và đánh giá một đối tượng lỗi trong quá trình lưu. – vikingosegundo

+0

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

+0

Chỉ cần theo [THIS] này (http://jamesonquave.com/blog/core-data-in-swift-tutorial-part-1 /) liên kết, nó sẽ cung cấp cho bạn từng bước hướng dẫn dòng. – Shardul

Trả lời

23

Cứu dữ liệu:

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() 
} 

Đang tải dữ liệu:

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

Bạn không phải gọi 'save()' sau khi bạn chèn một đối tượng mới? – MarksCode

2

Đối với tiết kiệm dữ liệu , bạn nên sử dụng:

context.insertNewObjectForEntityForName(...) 

Và như vậy khi bạn đang tải dữ liệu, nó phải là:

context.valueForKey (...)

Tuy nhiên, tôi không chắc liệu đó có phải là cú pháp chính xác không, vì bạn có thể cần lấy một mảng các thực thể và sau đó lấy đối tượng tại chỉ mục 0. Trên ghi chú đó tại sao bạn sử dụng dữ liệu cốt lõi cho điểm số cao? Bạn có thể muốn nhìn vào giá trị mặc định người dùng hoặc icloud, dữ liệu cốt lõi được thiết kế nhiều hơn cho cơ sở dữ liệu

+0

Nếu điều này gây nhầm lẫn, tôi có thể cung cấp mã mẫu, chỉ cần cho tôi biết – steffeydev

+0

không phải là 'context.insertNewObjectForEntityForName ...' nhưng 'NSEntityDescription.insertNewEntyty: inManagedObjectContext: ...' – Massmaker

Các vấn đề liên quan