访问从CoreData获取的实体属性值

时间:2017-01-14 15:45:47

标签: core-data swift3 nsfetchrequest

我在尝试访问CoreData的抓取结果中的数据时遇到问题。  数据显示在UITableView中,显示正常,我正在尝试实现一个基于属性过滤数据的选项。这也适用于NSCompoundPredicate

获取请求很顺利,但是我尝试从获取的实体的某个属性中提取值以将它们相加以显示总成本。

获取过滤结果的代码:

func attemptFilteredFetch(filter: Array<NSPredicate>) 
{
    let filterCriteria: NSCompoundPredicate = NSCompoundPredicate(andPredicateWithSubpredicates: filter)
    let fetchRequest: NSFetchRequest<StoredExpense> = StoredExpense.fetchRequest()
    let dateSort = NSSortDescriptor(key: "dateOfExpense", ascending: false)
    fetchRequest.sortDescriptors = [dateSort]
    fetchRequest.predicate = filterCriteria

    let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
    controller.delegate = self
    self.controller = controller

    do
    {            
        try controller.performFetch()            
    } 
    catch 
    {
        let error = error as NSError
        print("\(error)")
    } 
    expenseList.reloadData()
}

到目前为止,我已经尝试了一种方法,我发现here和类似的方法在线发现,但是当调用attemptFilteredFetch()函数时应用程序崩溃。

我可能会以错误的方式解决这个问题,但我希望我可以将获取请求添加到数组中并迭代它以获得总值。

有更好的方法吗?或者有没有办法在运行中访问属性的值?

1 个答案:

答案 0 :(得分:0)

该问题源于该模型继承自较旧版本的Xcode。 AFAIK in beta构建以便能够使用CoreData NSManagedObject子类必须手动创建。由于现在在Xcode的最终版本中这似乎是多余的,因此手动创建的模型会引发随机错误。删除它并清理代码解决了我遇到的问题。