关于ios:排序NSManagedObject数组

Sorting NSManagedObject array

我的项目中有一个应该可以运行的代码。简而言之,我想按创建日期对请求的获取结果进行排序,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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        }

但是在第5行,我得到了警告:"从[AnyObject]投射到不相关的NSArray类型始终失败"。


您的代码有点复杂。

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

1
2
3
4
5
6
7
8
9
10
11
   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)")
   }

关于您的错误:

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

1
let results = try context.executeFetchRequest(fetchRequest) as! [NSManagedObject]

我还建议将context设置为非可选(例如在最新的Core Data模板中)