[英]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
設計!
根據我的理解,您是說您有一個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.