对NSManagedObject数组进行排序

And*_* M. 2 arrays core-data ios swift

我的项目中有一个应该有效的代码.简单地说,我想按创建日期对请求的获取结果进行排序,如下所示:

0        context =...
1        let fetchRequest = NSFetchRequest(entityName: CoreDataValues.EntityName)
2        do {
3            let results = try context?.executeFetchRequest(fetchRequest)
4            let sortDescriptor = NSSortDescriptor(key: CoreDataValues.CreationDateKey, ascending: true)

5            if let sortedObjects = (results as? NSArray)?.sortedArrayUsingDescriptors([sortDescriptor]) as? [NSManagedObject] {
6                searchTextObjects = sortedObjects
7                tableView.reloadData()
8            }

9        } catch let error as NSError {
10            print("Could not fetch \(error), \(error.userInfo)")
11        }
Run Code Online (Sandbox Code Playgroud)

但在5行我发出警告:"从[AnyObject]转换为无关类型的NSArray总是失败".

vad*_*ian 7

你的代码有点复杂.

建议的方法是将排序描述符与获取请求一起传递

   context =...
   let fetchRequest = NSFetchRequest(entityName: CoreDataValues.EntityName)
   let sortDescriptor = NSSortDescriptor(key: CoreDataValues.CreationDateKey, ascending: true)
   fetchRequest.sortDescriptors = [sortDescriptor]
   do {
        searchTextObjects = try context?.executeFetchRequest(fetchRequest)
        tableView.reloadData()

   } catch let error as NSError {
       print("Could not fetch \(error), \(error.userInfo)")
   }
Run Code Online (Sandbox Code Playgroud)

关于你的错误:

executeFetchRequest返回,[AnyObject]以便您可以尽快将类型转换为正确的类型.

let results = try context.executeFetchRequest(fetchRequest) as! [NSManagedObject]
Run Code Online (Sandbox Code Playgroud)

我建议也做context非可选(如在最新的Core Data模板中)