Je suis nouveau chez swift et j'essaie de faire une application avec CoreData, mais le prédicat ne me montre pas les bons résultats. Il semble que le programme ignore le prédicat, car sans le prédicat, il montre les mêmes choses. Voici mon code:Coredata fetchrequest prédicat ne montre pas les bonnes choses
import UIKit
class UebungenAnzeigenTableViewController: UITableViewController {
var mgdContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var uebungen = [Uebung]()
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if let uvc = segue.destinationViewController as? UebungenAnzeigenViewController {
if let identifier = segue.identifier{
switch identifier{
case "Brust":
let request = NSFetchRequest(entityName: "Uebung")
request.predicate = NSPredicate(format: "muskel == %@", "Brust")
do{
try uebungen = mgdContext.executeFetchRequest(request) as! [Uebung]
}
catch{
print("Abfrage fehlgeschlagen!")
}
case "Ruecken":
break
case "Beine":
break
case "Schulter":
break
case "Bizeps":
break
case "Trizeps":
break
case "Nacken":
break
case "Unterarm":
break
default:
break
}
}
}
}
}
Voici l'endroit où les exercices doivent être affichés:
import UIKit
class UebungenAnzeigenViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var mgdContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
@IBOutlet weak var tableView: UITableView!
var uebungen = [Uebung](){
didSet{
self.tableView.reloadData()
}
}
override func viewDidLoad() {
super.viewDidLoad()
loadUebungen()
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("UebungCell", forIndexPath: indexPath)
let uebung = uebungen[indexPath.row]
cell.textLabel!.text = uebung.name!
cell.textLabel?.textAlignment = .Center
return cell
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return uebungen.count
}
func loadUebungen(){
let request = NSFetchRequest(entityName: "Uebung")
do{
try uebungen = mgdContext.executeFetchRequest(request) as! [Uebung]
}
catch{
print(error)
}
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "neueUebung" {
let ctrl = segue.destinationViewController as! UebungSaveViewController
ctrl.saveDelegate = {
(newUebung, newMuskelgruppe) in
let neueUebung = NSEntityDescription.insertNewObjectForEntityForName("Uebung", inManagedObjectContext: self.mgdContext) as! Uebung
neueUebung.name = newUebung
neueUebung.muskel = newMuskelgruppe
do{
try self.mgdContext.save()
}
catch{
print("speichern fehlgeschlagen")
}
self.loadUebungen()
self.navigationController?.popViewControllerAnimated(true)
}
}
}
}
.. Et là, je l'ai sauvé les exercices:
import UIKit
class UebungSaveViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource{
var muskelgruppen = ["Brust", "Rücken", "Beine", "Schultern", "Bizeps", "Trizeps", "Nacken", "Unterarme"]
var saveDelegate: ((String, String) ->())?
var selectedMuskelgruppe = "Brust"
@IBOutlet weak var pickerView: UIPickerView!
@IBOutlet weak var nameTextField: UITextField!
@IBAction func saveUebungAction(sender: UIButton) {
let neueUebung = nameTextField.text
if saveDelegate != nil && neueUebung != nil {
saveDelegate!(neueUebung!, selectedMuskelgruppe)
}
}
override func viewDidLoad() {
super.viewDidLoad()
self.pickerView.dataSource = self
self.pickerView.delegate = self
self.hideKeyboardWhenTappedAround()
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return muskelgruppen.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return muskelgruppen[row]
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
switch row{
case 0:
selectedMuskelgruppe = "Brust"
case 1:
selectedMuskelgruppe = "Rücken"
case 2:
selectedMuskelgruppe = "Beine"
case 3:
selectedMuskelgruppe = "Schultern"
case 4:
selectedMuskelgruppe = "Bizeps"
case 5:
selectedMuskelgruppe = "Trizeps"
case 6:
selectedMuskelgruppe = "Nacken"
case 7:
selectedMuskelgruppe = "Unterarm"
default:
break
}
}
}
Quelqu'un peut-il nous dire pourquoi cela ne fonctionne pas? Je suis nouveau dans rapide et j'ai essayé beaucoup de choses, mais je ne comprends pas ..
Oui, maintenant ça marche! Je vous remercie! –