如何快速使用 CoreData 信息对 UITableView 进行排序?

Posted

技术标签:

【中文标题】如何快速使用 CoreData 信息对 UITableView 进行排序?【英文标题】:How can I sort a UITableView using CoreData information in swift? 【发布时间】:2015-01-12 15:57:39 【问题描述】:

我是核心数据的新手,我正在尝试从从 CoreData 获取的数据中对我的 UITableView 进行排序。我知道如何使用数组来做到这一点,但我正在努力寻找如何使用 CoreData 来做到这一点。我读过类似的问题,但它要么是在 Objective-c 中——我还没有学过——要么它没有解决我的具体问题。我的 CoreData 实体被命名为 numbers,它存储用户传入的 Float 类型的数字。我的代码在我的 viewDidAppear 方法中,第一行是我在该类中全局可用的 myNumbers 数组的声明。 ***请注意,我的实体有多个属性,我有一个属性“数字”和一个属性“名称”,它是一个字符串。

    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】:

您可以使用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。如果您正在处理非常大或瞬态的数据集,则尤其如此。

【讨论】:

请注意,OP 想要获取名为“Numbers”的实体,因此可能key: "numbers" 必须替换为Number 实体的适当属性名称。 谢谢 Michal,我忽略了那个澄清。我已经更新了我的答案。 我已经尝试了您的解决方案(感谢您的帮助),我尝试了一些变体,但似乎没有任何效果。我正在尝试找出问题所在以及这一切是如何运作的。 您需要发布更多代码,因为此答案中的代码没有任何问题 非常感谢!你帮了很多忙。现在可以用了,太棒了!

以上是关于如何快速使用 CoreData 信息对 UITableView 进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何快速检索满足条件的CoreData 2

如何快速删除coredata数据库中的特定行数据

如何删除/替换有序对多 CoreData 关系中的对象?

核心数据和数据保护

如何在 segue 中从 CoreData 获取结果

如何跳转到iOS开发中另一个UITab下的其他UINavigationController?