我最近一直在实现核心数据框架,实现的每一步都有一个隐藏的问题。
问题来了,我不太确定如何解决。
到目前为止,我已经为我的 tableview 实现了保存和获取功能。
首先,fetch 返回了数据错误,所以我已经实现了
fetchRequest.returnsObjectsAsFaults = false
现在数据已输入并显示在表格 View 中,但它有大量重复项并且顺序困惑,所以我添加了
fetchRequest.returnsDistinctResults = true
但这没有用,所以在谷歌搜索后我已经实现了以下一个类轮
fetchRequest.resultType = NSFetchRequestResultType.DictionaryResultType
作为最终结果,fetch 函数根本没有运行。调试器只是跳过操作,应用程序返回一个空的表格 View 。
这是我的代码。期待任何建议:
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
来抑制它们,您应该避免创建它们。
最后一行是空 TableView 的原因。因为您指定了 DictionaryResultType
,所以 fetch 返回的数组是一个 字典数组。但是用这一行:
fetchedResults = try managedObjectContext.executeFetchRequest(fetchRequest) as? [NSManagedObject]
然后您尝试将该数组转换为 NSManagedObjects 的数组。该转换失败,因此 fetchedResults 为 nil,因此未设置 someOtherArray
。
关于困惑的顺序,您应该使用排序描述符(参见 NSSortDescriptor 文档)按照您喜欢的方式对结果进行排序。
最后,与您的其他问题一样,您将 someOtherArray
设置为 [results],这是一个包含 results
数组的数组。我怀疑你真的想要:
someOtherArray = results
关于ios - 核心数据跳过获取函数 Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32517889/