2017-04-20 2 views
0

Ich habe eine Schaltfläche hinzugefügt, die Punkte zu einem Label hinzufügt. Alles funktioniert gut, und das Label bleibt dann in den Kerndaten erhalten und erscheint in einer TableViewCell.Inkrementieren von Punkten zurück zu 0 swift

Wenn ich zurück zu meinen DetailsVC komme, bekomme ich mein Etikett mit der fortgesetzten Nummer, aber wenn ich erneut auf den Knopf klicke, um die Punkte zu erhöhen, geht das Etikett wieder auf Null zurück.

Hier ist ein Teil meines Code:

import UIKit 
import CoreData 

class GoalDetailsVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

    // IBOutlets: 

    @IBOutlet weak var titleTF: UITextField! 
    @IBOutlet weak var detailsTextView: UITextView! 
    @IBOutlet weak var pointsLabel: UILabel! 
    @IBOutlet weak var dateOfEntry: UILabel! 
    @IBOutlet weak var thumbImage: UIImageView! 


    // properties 

    var currentScore = 0 
    var goalToEdit: Goal? // goalToEdit is now an optional, and it needs to be unwrapped when used. 
    var imagePicker: UIImagePickerController! 



    override func viewDidLoad() { 
     super.viewDidLoad() 

     if let topItem = self.navigationController?.navigationBar.topItem { 
      topItem.backBarButtonItem = UIBarButtonItem(title: "", style: UIBarButtonItemStyle.plain, target: nil, action: nil) 

     } 

     // now we need to say that if there is a goal to edit (not equal to nil), then we load the Goal data with the loadGoalData() function. 



     if goalToEdit != nil { 

      loadGoalData() 
     } 

     imagePicker = UIImagePickerController() 
     imagePicker.delegate = self 



    } 

    // when button is pressed, I need to 
    // 1 : add a point to the pointsLabel 
    // 2 : put the current date to the dateLabel 
    // 3 : persist the new points and date labels. 

    @IBAction func plusOneBtnPressed(_ sender: UIButton) { 

     currentScore += 1 

     pointsLabel.text = "\(currentScore)" 

    } 


    @IBAction func minusOneBtnPressed(_ sender: Any) { 
    } 


    @IBAction func savePressed(_ sender: Any) { 

     var goal: Goal! 
     let picture = Image(context: context) // Image = Entity 

     picture.image = thumbImage.image // image = attribute 



     if goalToEdit == nil { 

      goal = Goal(context: context) 
     } else { 
      goal = goalToEdit 
     } 


     goal.toImage = picture 

     // this is unwrapping because the original goalToEdit is an optional. 

     if let title = titleTF.text { 
      goal.title = title 

     } 

     // we saveed, or persisted the TITLE 

     if let points = pointsLabel.text { 
      goal.plusOnes = (points as NSString).intValue 
     } 


     // we saveed, or persisted the POINTS 

     if let details = detailsTextView.text { 

      goal.details = details 
     } 

     // we saved, or persisted the DETAILS 

     let dateFormatter = DateFormatter() 

     dateFormatter.dateFormat = "EEEE MMM d yyyy" 

     if let date = dateFormatter.date(from: dateFormatter.dateFormat) { 
      goal.lastEntry = date as NSDate 
     } 

     // we saved, or persisted the DATE 

     ad.saveContext() 

     _ = navigationController?.popViewController(animated: true) 

    } 

    func loadGoalData() { 

     if let goal = goalToEdit { 
      titleTF.text = goal.title 
      pointsLabel.text = "\(goal.plusOnes)" 
      detailsTextView.text = goal.details 
      dateOfEntry.text = (String(describing: goal.lastEntry)) 
      thumbImage.image = goal.toImage?.image as? UIImage 

     } 

} 
+0

Ohne in der Lage zu sein, mehr Code oder Ihren Prozess zu sehen, denke ich, liegt es daran, dass Sie die Bezeichnung auf currentScore setzen, was ich auch rate, wenn diese Datei geladen wird. Es wird also immer auf 0 gesetzt, wenn diese Datei geladen wird, unabhängig davon, was in CoreData gespeichert wurde. – Asdrubal

+0

Danke @Asdrubal, hier ist mehr von meinem Code über –

+0

die Zeile, die Sie ändern müssen, ist var currentScore = 0. Es sollte gleich gesetzt werden, was der Wert in CoreData ist oder 0. Etwas wie 'currentScore = coreDataValue ?? 0' – Asdrubal

Antwort

0

Wenn Sie die beibehaltenen Nummer erhalten Sie auch currentScore auf diesen Wert gesetzt sein (wenn größer als 0). Ich glaube, dass Sie derzeit nur auf 0 setzen, deshalb beginnt die Inkrementierung von vorne.

+0

vielen Dank für Ihre Hilfe Ahmad. Ich habe meinen Beitrag mit weiteren Details bearbeitet. Ich bin neu in den Kerndaten und stehe fest. Vielen Dank –

+0

in loadGoalData() müssen Sie currentScore = goal.plusOnes setzen. – Ahmad

+0

vielen dank Ahmad. Das hat ziemlich gut funktioniert. Ich schätze deine Hilfe sehr –