ios - Coredata fetchrequest 谓词未显示正确的内容

标签 ios swift core-data nspredicate nsfetchrequest

我是 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 的新手,我尝试了很多东西,但我不明白......

最佳答案

那是因为你似乎没有谓词:

func loadUebungen(){
    let request = NSFetchRequest(entityName: "Uebung")
    do{
        try uebungen = mgdContext.executeFetchRequest(request) as! [Uebung]
    }
    catch{
        print(error)
    }
}

你确实有一个谓词与实际填充表的代码断开连接,所以你得到一个过滤列表并且在 segue 方法(在以前的 View Controller 中)中没有对它做任何事情但是没有应用谓词在您真正需要它的地方(在 loadUebungen 中)。

关于ios - Coredata fetchrequest 谓词未显示正确的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36793806/

相关文章:

ios - 使用 MVVM 时,如何在子 ViewController 中扩展 ViewModel?

ios - 查询 Firebase 以查找值的每个实例

node.js - 无法连接到服务器 - Migration Parse Server iOS

ios - Swift Core Data Fetch 某个日期的结果

ios - CoreData 上的 UserInfo 字典

ios - 如何动态生成CoreData对象

iOS:对 View Controller 的所有对象使用弱?

iOS。每次应用程序从后台进入事件状态时,如何从头开始 Storyboard?

ios - 格式化日期字符串 Swift 3 中的问题

ios - 如果应用程序在后台运行,如何以编程方式截取屏幕截图