ios - Swift fetch 请求返回 0 个结果,尽管明显有 192 个结果

标签 ios swift core-data interpolation nsmanagedobjectcontext

我像这样发出获取请求:

let pageFetchRequest = NSFetchRequest(entityName: "Page")
let results = try managedObjectContext.executeFetchRequest(pageFetchRequest)

此处,results 将返回 0 个结果{}

但我自己这样做:

managedObjectContext.executeFetchRequest(pageFetchRequest)

我得到了全部 192 个结果。只要我不将其分配给诸如 results 之类的变量即可。这是为什么?分配它或使用方法 try 是否会阻止其工作?

更新

这是完整的帖子。请注意,我如何针对两个不同的相关请求两次使用 managedObjectContext。也许这就是我的结果搞砸的原因?

    let managedObjectContext = self.managedObjectContext

    for item in items {
        let word = Word(chapter: Int(item.chapter)!, verse: Int(item.verse)!, sanskrit: item.sanskrit, english: item.english, insertIntoManagedObjectContext: managedObjectContext)

        // Assign the Page
        let pageFetchRequest = NSFetchRequest(entityName: "Word")
        let chapterPred = NSPredicate(format: "(chapter = %d)", Int(item.chapter)!)
        let versePred   = NSPredicate(format: "(verse = %d)", Int(item.verse)!)
        pageFetchRequest.fetchLimit = 1
        pageFetchRequest.predicate = NSCompoundPredicate(type: .OrPredicateType, subpredicates: [chapterPred, versePred])

        do {
            let results = try managedObjectContext.executeFetchRequest(pageFetchRequest)
            if let page = results.first as? NSManagedObject {
                word.setValue(page, forKey: "page")
            }

        } catch let error as NSError {
            print("Could not save \(error), \(error.userInfo)")
        }

        do {
            try managedObjectContext.save()
        } catch let error as NSError {
            print("Could not save \(error), \(error.userInfo)")
        }

最佳答案

很明显,答案..我认为..是创建一个单独的管理对象上下文,它不会与父对象混淆..就像这样:

                let appDelegate          = UIApplication.sharedApplication().delegate as! AppDelegate
                let secondManagedContext = appDelegate.managedObjectContext
                let pageFetchRequest = NSFetchRequest(entityName: "Page")Int(item.verse)!)
                pageFetchRequest.fetchLimit = 1
                pageFetchRequest.predicate = NSCompoundPredicate(type: .OrPredicateType, subpredicates: [chapterPred, versePred])

然后我还必须写这个:

                do {
                    var results:[NSManagedObject]
                    results = try secondManagedContext.executeFetchRequest(pageFetchRequest) as! [Page]
                    if let page = results.first {
                        word.setValue(page, forKey: "page")
                    }

关于ios - Swift fetch 请求返回 0 个结果,尽管明显有 192 个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36408428/

相关文章:

ios - 如何通过点击取消按钮显示两个 ViewController 之一?

ios - 创建具有相同属性重复条目的核心数据对象?

objective-c - CoreData NSArrayController addObject : Agonizingly Slow

ios - 在保存到 coredata -Swift 之前检查数据是否存在

iphone - 在 ios 中使用 UITableView 创建图像网格

ios - Flash builder 无法验证 AIR 应用程序 ID 是否与配置文件中指定的模式匹配

swift - 以编程方式在indexpath.item处呈现一个UIViewController(嵌入在UITabBarController中)

ios - 访问uiviews的 subview 可以吗

ios - 核心数据 : How to update value of type NSSet

ios - 将 NSMutableArray 传递给 Swift 中的另一个对象