使用Swift中的NSPredicate显示CoreData的结果

时间:2015-07-10 00:19:31

标签: ios uitableview core-data nspredicate

我的viewDidLoad()

中有以下代码
    fetchedResultsController = NSFetchedResultsController(fetchRequest: FetchRequest("Teams", key: "team_name"), managedObjectContext: managedObjectContext!, sectionNameKeyPath: nil, cacheName: nil)
    fetchedResultsController?.delegate = self
    fetchedResultsController?.performFetch(nil)

这个代码在我的TableView中的cellForRowAtIndex:

        var cell = teamView.dequeueReusableCellWithIdentifier("team_cell", forIndexPath: indexPath) as! TeamCellSettings

        if let cellContact = fetchedResultsController?.objectAtIndexPath(indexPath) as? Team {
            //create cell here
        }

    return cell

我已经在线阅读了如何使用NSPredicate,但我似乎无法让它发挥作用。我的目标是使用分段控件根据行属性的内容在UITableView中显示的结果之间切换。因此,如果我的实体X具有名为A的属性,A将存储1或0,所以基本上我需要分段控件在所有结果包含属性A中的1或属性A中的0

我的创作写作技巧并不是最好的。希望你能理解我的目标。谢谢。

1 个答案:

答案 0 :(得分:4)

需要将谓词添加到获取请求中,例如:

let request = NSFetchRequest(entityName: "Your entity name")
let predicate = NSPredicate(format: "A == %d", 1)
request.predicate = predicate

fetchedResultsController = NSFetchedResultsController(
  fetchRequest: request, 
  managedObjectContext: managedObjectContext!, 
  sectionNameKeyPath: nil, 
  cacheName: nil)

谓词的内容取决于你的目标。在下一步中,您将需要更新获取请求并在更改分段控件中的选定项时重新加载数据。在分段控件更改时调用的IBAction中,获取sender.selectedSegmentIndex并根据索引创建新谓词。 重新获取的代码将如下所示: 斯威夫特2

        fetchedResultsController.fetchRequest.predicate = NSPredicate(format: "A = %d", some_int_goes_here)
        do {
            try fetchedResultsController.performFetch()
        }
        catch let error as NSError {
            NSLog("%@", error.localizedDescription)
        }
        catch {
            fatalError()
        }
        tableView.reloadData()

如果你使用Swift 1.2,省略错误处理,当然是这样的:

fetchedResultsController.fetchRequest.predicate = NSPredicate(format: "A = %d", some_int_goes_here)
fetchedResultsController.performFetch()
tableView.reloadData()