我是核心数据的新手,我正在尝试从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”属性在表视图中对数据进行排序。
答案 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
。如果您正在处理非常大或瞬态的数据集,则尤其如此。