我是swift的新手,我尝试使用CoreData制作应用程序,但谓词并没有向我显示正确的结果。似乎程序忽略了谓词,因为没有谓词它会显示相同的东西。 这是我的代码:
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
}
}
}
}
}
这是应该展示练习的地方:
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)
}
}
}
}
..在这里我保存了练习:
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
}
}
}
任何人都知道为什么这不起作用?我是swift的新手,我尝试了很多东西,但我没有得到它......
答案 0 :(得分:1)
那是因为你似乎没有谓词:
func loadUebungen(){
let request = NSFetchRequest(entityName: "Uebung")
do{
try uebungen = mgdContext.executeFetchRequest(request) as! [Uebung]
}
catch{
print(error)
}
}
你确实有一个谓词与实际填充表的代码断开连接,所以你得到一个过滤列表并且在segue方法(在前一个视图控制器中)中没有做任何事情,但是后来没有应用谓词你真正需要的地方(loadUebungen
)。