2016-04-04 6 views
0

Ich mache meine Anfrage holen wie so:Swift Abrufanforderung gibt 0 Ergebnisse, obwohl es klar 192 Ergebnisse

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

Hier results wird 0 results {} zurück.

Aber ich tue dies für sich allein:

managedObjectContext.executeFetchRequest(pageFetchRequest) 

ich alle 192 Ergebnisse. Solange ich es nicht einer Variablen wie results zuweisen. Warum das? Wird dies durch das Zuweisen oder Verwenden der Methode try verhindert?

aktualisieren

Dies ist die vollständige Post. Beachten Sie, wie ich managedObjectContext zweimal für zwei verschiedene verwandte Anfragen verwende. Vielleicht verpfuscht das meine Ergebnisse?

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)") 
     } 
+0

Woher wissen Sie, dass Sie 192 Ergebnisse erhalten, wenn Sie nicht zu einer Variablen zuweisen? – Macondo2Seattle

+0

@ Macondo2Seattle Vom Setzen eines Debuggers auf dieser Zeile und Ausführen der zuvor genannten Zeile mit vorangestelltem 'po' – Trip

+0

Haben Sie einen Catch-Block, um Fehler zu erkennen? In der Dokumentation gibt executeFetchRequest bei einem Fehler nil zurück. –

Antwort

0

So offensichtlich die Antwort .. denke ich .. war eine separate managedObjectContext zu erstellen, die nicht mit den Eltern zu verwechseln würde man .. Wie so:

   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]) 

Und dann musste ich schreiben Sie auch das:

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