2016-04-06 20 views
1

如果我使用一對多,我可以顯示所有關聯的NSSet記錄,但許多人看起來似乎不工作。如何顯示與nsfetchedresultcontroller的多對多關係?

在我的繼續我通過體操運動員到一個VC中,我想在其中顯示所有相關的會面,在一對多工作正常。

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

     if let objs = fetchedResultsController.fetchedObjects where objs.count > 0 { 

      let item = objs[indexPath.row] as! Gymnast 

      performSegueWithIdentifier("displayMeets", sender: item) 
     } 
    } 

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 

     if segue.identifier == "displayMeets" { 

      let vc = segue.destinationViewController as! SelectMeetVC 

      vc.selectedGymnast = sender as? Gymnast 
     } 
    } 

我得到一個崩潰,除非我註釋掉NSPREDICATE

func loadFetchRequest() { 

     self.fetchedResultsController = nil 

     let fetchRequest = NSFetchRequest(entityName: "Meet") 

     let sortDescriptor1 = NSSortDescriptor(key: "meetName", ascending: true) 

     fetchRequest.sortDescriptors = [sortDescriptor1] 

     //let filter = NSPredicate(format: "gymnasts.fullName == %@", "\(selectedGymnast.fullName!)") 

     //fetchRequest.predicate = filter 

     let controller = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: AD.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) 

     controller.delegate = self 

     fetchedResultsController = controller 

     do { 

      try fetchedResultsController.performFetch() 

     } catch { 

      fatalError("Error retrieving core data") 
     } 
    } 

回答

0

因爲gymnasts關係是一對多的,你需要修改的謂詞,以便可以選擇一個Meet如果的任何gymnasts匹配:

let filter = NSPredicate(format: "ANY gymnasts.fullName == %@", "\(selectedGymnast.fullName!)") 

還請注意,有沒有必要使用fullName屬性 - 你可以匹配Gymnast對象本身:

let filter = NSPredicate(format: "ANY gymnasts == %@", selectedGymnast) 
+0

非常感謝。完美工作。 – debratton