[英]Core data skips fetch function Swift
我最近一直在执行核心数据框架,实现的每个步骤背后都有一个隐藏的问题。 我不确定如何解决这个问题。
到目前为止,我已经为tableview实现了save和fetch函数。
首先获取是返回数据错误 ,所以我已经实现了
fetchRequest.returnsObjectsAsFaults = false
现在,数据已馈入并显示在表格视图中,但是它具有大量重复项,并且处于混乱的顺序,所以我添加了
fetchRequest.returnsDistinctResults = true
但这没有用,所以在谷歌搜索后,我实施了以下一种班轮
fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType
最终结果是,提取功能根本没有运行。 调试器仅跳过该操作,应用程序将返回一个空的tableview。
这是我的代码。 期待任何建议:
func fetchItems() {
// get the managed object context
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
let managedObjectContext = appDelegate.managedObjectContext!
// create fetch requests
let fetchRequest = NSFetchRequest(entityName:"Entities")
fetchRequest.returnsObjectsAsFaults = false
fetchRequest.returnsDistinctResults = true
fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType
var fetchedResults : [NSManagedObject]?
do {
fetchedResults = try managedObjectContext.executeFetchRequest(fetchRequest) as? [NSManagedObject]
}
catch {
print("Could not fetch \(error)")
}
if let results = fetchedResults {
someOtherArray = [results]
}
}
我非常怀疑您是否需要以下这些行:
fetchRequest.returnsObjectsAsFaults = false
fetchRequest.returnsDistinctResults = true
fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType
首先主要是性能优化。 一般来说,“故障”并不是引起关注的原因-CoreData通过不填充获取操作返回的所有对象的属性值来节省内存。 但是,当您尝试访问其任何属性时,它将为每个对象自动执行此操作。 因此,该行很好,但不必要。
关于重复数据,您不应使用returnsDistinctResults
来抑制它们,而应避免创建它们。
最后一行是空表视图的原因。 因为您指定了DictionaryResultType
,所以获取所返回的数组是一个字典数组。 但是这行:
fetchedResults = try managedObjectContext.executeFetchRequest(fetchRequest) as? [NSManagedObject]
然后,您尝试将该数组转换为NSManagedObjects数组。 该转换失败,因此fetchedResults为nil,因此未设置someOtherArray
。
关于混乱的顺序,应该使用排序描述符(请参见NSSortDescriptor文档)对结果进行排序。
最后,与另一个问题一样,您将someOtherArray
设置为[results],这是一个包含results
数组的数组。 我怀疑您实际上想要的是:
someOtherArray = results
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.