ios - 核心数据跳过获取函数 Swift

标签 ios swift uitableview core-data

我最近一直在实现核心数据框架,实现的每一步都有一个隐藏的问题。 问题来了,我不太确定如何解决。
到目前为止,我已经为我的 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/

相关文章:

uitableview - AutoLayout 在调用 layoutIfNeeded() 时打破约束

ios - 根据 swift map 的缩放级别,在 Google map 中显示某个区域中的标记数量

ios - 可滚动 TextView : shows bottom of text as first

Swift 在实现协议(protocol)方法时提供泛型方法类型参数

json - 从关闭的应用程序发送有关新 JSON 数据的本地通知? | swift

ios - 如何让 UITableView 请求可见表格之外的 X 个下一个单元格?

ios - ARC弱引用构建时报错

ios - Swift2 iOS - 注销当前用户并创建新用户,为新用户保留旧用户的默认值

ios - 如何将 MASConstraint 转换为 NSLayoutConstraint?

swift - 获取 `(UInt8.min + UInt8.max) * 3` 到控制台