簡體   English   中英

如何獲取核心數據並使用NSPredicate Swift對其進行過濾

[英]How to take Core Data and Filter it with NSPredicate Swift

我目前正在學習並創建一個基本的決策應用程序。 該應用程序的基本原理是讓用戶輸入他們想要做的類別,然后輸入所有想要填充該類別的內容。

現在,我想在一個可以工作的表格視圖上顯示結果,但是我還要單擊他們最近使用的每個單獨類別的內容,並能夠查看他們放置在every類別下的內容。 我正在獲取保存到核心數據中的所有內容,但是現在我試圖使用NSPredicate篩選出我需要的內容。 當我運行該應用程序時,表視圖中沒有任何內容。

mainName我從另一個視圖控制器傳入來捕獲和設置類別名稱,以幫助過濾數據。 我試圖在謂詞中將其用作過濾器。

我不知道我在做什么是否正確,但是幫助會很棒。 這是我要完成的獨立研究項目,目前我所知道的一切都是自學的。 如果我所擁有的完全錯誤,請告訴我。 這只是我嘗試實現此目的的數百種不同方法之一。

@IBOutlet weak var tableview: UITableView!


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return whats.count


}
 func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("cell")! as UITableViewCell

    let Doing = whats[indexPath.row]
    cell.textLabel!.text = Doing.valueForKey("what") as? String


    return cell
}

 func loadData(){


    let appDelegate = UIApplication.sharedApplication().delegate as? AppDelegate

    if let context = appDelegate?.managedObjectContext{

        let fetchRequest = NSFetchRequest(entityName: "Doing")
        let namePredicate = NSPredicate(format: "namesR.noun = '\(mainName)'")
        (whats as NSArray).filteredArrayUsingPredicate(namePredicate)
        fetchRequest.predicate = namePredicate
        do {
           let results =
                try context.executeFetchRequest(fetchRequest)
            whats = results as! [NSManagedObject]
        } catch let error as NSError {
            print("Could not fetch \(error), \(error.userInfo)")
        }
    }
}

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

}

override func viewDidLoad() {
    super.viewDidLoad()

    loadData()
}

如果要在基於tableView的應用程序中使用Core Data 您可以使用NSFetchedResultsController類及其delegate協議方法。 此類專門為tableView設計!

NSFetchedResultsController類的官方文檔

根據我的理解,您是說您有一個Category實體和一個Item實體,其中每個Category都有許多Item。 在這種情況下,在要顯示項目的視圖控制器中,需要有一個類別變量以在謂詞中使用,以便僅取回與該類別關聯的項目。

class ItemsTableVC {

    var category: Category!

    lazy var fetchedResultsController: NSFetchedResultsController = {
        let fetchRequest = NSFetchRequest(entityName: "Item")
        fetchRequest.sortDescriptors = []
        fetchRequest.predicate = NSPredicate(format: "category == %@", self.category)
        let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.sharedContext, sectionNameKeyPath: nil, cacheName: nil)
        fetchedResultsController.delegate = self
        return fetchedResultsController
    }()

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM