我像这样发出获取请求:
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/