繁体   English   中英

核心数据跳过获取功能Swift

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM