如何在swift中使用Core Data信息对表视图进行排序?

时间:2015-01-12 15:57:40

标签: ios uitableview swift core-data

我是核心数据的新手,我正在尝试从CoreData提取的数据中对UITableView进行排序。我知道如何使用数组执行此操作,但我很难找到如何使用CoreData执行此操作。我已经阅读了类似的问题,但它是在Objective-c中,我没有学到 - 或者它没有解决我的具体问题。我的CoreData实体是命名数字,它存储用户传入的Float类型的数字。我的代码在我的viewDidAppear方法中,第一行是myNumbers数组的声明,该数组在该类中是全局可用的。 ***请注意我的实体有多个属性,我有一个属性“number”和一个属性“name”,它是一个字符串。

    var myNumbers: Array<AnyObject> = []

override func viewDidAppear(animated: Bool) {

    let appDeleg: AppDelegate = UIApplication.sharedApplication().delegate as AppDelegate
    let context: NSManagedObjectContext = appDeleg.managedObjectContext!
    let fetchreq = NSFetchRequest(entityName: "Numbers")

    //Would I be adding the sort descriptor here?
    let sortDescriptor = NSSortDescriptor(key: "numbersAttribute", ascending: true)
    fetchreq.sortDescriptors = [sortDescriptors]

    myNumbers = context.executeFetchRequest(fetchreq, error: nil)!
    tableView.reloadData()

}

现在这是我的cellForRowAtIndexPath方法中的代码:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    let CellID: NSString = "myCell"

    var cell: CustomCell = tableView.dequeueReusableCellWithIdentifier(CellID) as CustomCell

    if let indexpth = indexPath as NSIndexPath! {

        var data: NSManagedObject = myNumbers[indexpth.row] as NSManagedObject
        cell.theTextLabel?.text = data.valueForKeyPath("tName") as? String

        cell.theDetailTextLabel?.text = data.valueForKeyPath("tNumber") as? String

    }

我想根据Numbers实体中的“tNumber”属性在表视图中对数据进行排序。

1 个答案:

答案 0 :(得分:3)

您可以使用NSSortDescriptor执行此操作。在执行获取请求以填充myNumbers之前,请执行以下操作。

// Note that the key is the attribute of your Numbers entity that you are sorting
let sortDescriptor = NSSortDescriptor(key: "tNumber", ascending: true)
fetchreq.sortDescriptors = [sortDescriptors]

这应该可行,但是将Core Data中的数据加载到表中的最佳方法是使用NSFetchedResultsController。如果您正在处理非常大或瞬态的数据集,则尤其如此。