【问题标题】:Sorting NSManagedObject array排序 NSManagedObject 数组
【发布时间】:2016-02-15 18:56:38
【问题描述】:

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

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 总是失败”。

【问题讨论】:

    标签: ios arrays swift core-data


    【解决方案1】:

    你的代码有点复杂。

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

       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],因此您可以尽快将类型转换为正确的类型。

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

    我还建议将context 设为非可选(就像在最新的核心数据模板中一样)

    【讨论】:

    • 能否请您链接该核心数据模板以使上下文不可选?在这段代码中,我有全局计算属性上下文:NSManagedObjectContext?
    • 只需在 Xcode 7 中创建一个启用 Core Data 的新项目。代码将自动创建。
    猜你喜欢
    • 2011-05-10
    • 2018-08-31
    • 1970-01-01
    • 1970-01-01
    • 2018-07-11
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    相关资源
    最近更新 更多