title: Swift and CoreData, problems with relationship (NSSet) - [NSSet intersectsSet:]: set argument is not an NSSet
body: <p>I've been trying to get my head around adding objects in relationships using CoreData and Swift. I am at a loss, I do not understand why my code does not work. I am trying to add an "Event" to a "Team". I can not find the difference between accepted answers (that should work), and my code (that does not).</p>
  
  <p>Teams.swift:</p>
  
  <pre><code>import Foundation
  import CoreData
  
  class Teams: NSManagedObject {
  
      @NSManaged var teamName: String
      @NSManaged var matches: NSSet
  
  }
  
  extension Teams {
  
      func addEventToTeam(event:Event) {
          //self.mutableSetValueForKeyPath("matches").addObject(event)
  
          var matchez: NSMutableSet
  
          matchez = self.mutableSetValueForKey("matches")
          matchez.addObject(event)
  
  
          //var manyRelation = self.valueForKeyPath("matches") as NSMutableSet
          //manyRelation.addObject(event)
      }
  
      func getTeamName() -&gt; String {
          return teamName
      }
  
  
  }
  </code></pre>
  
  <p>Calling code (from configure view):</p>
  
  <pre><code>import UIKit
  import CoreData
  
  class DetailViewController: UIViewController, NSFetchedResultsControllerDelegate {
  
      var managedObjectContext: NSManagedObjectContext? = nil
  
      @IBOutlet weak var detailDescriptionLabel: UILabel!
  
  
      var detailItem: AnyObject? {
          didSet {
              // Update the view.
              self.configureView()
          }
      }
  
      func configureView() {
          // Update the user interface for the detail item.
          if let detail: Event = (self.detailItem as? Event) {
          //if let detail: AnyObject = self.detailItem {
  
              if let label = self.detailDescriptionLabel {
                  label.text = detail.valueForKey("timeStamp").description
  
                  self.insertNewObject(self);
                  label.text = String(detail.getNumberOfTeams())
  
                  //detail.getTeams().
                  var hej: Array&lt;Teams&gt;
                  hej = detail.getTeams()
  
                  label.text = "tjosan"
  
                  for tmpTeam : Teams in hej {
                      label.text = label.text + ", " + tmpTeam.getTeamName()
                  }
  
  
              }
          }
  
          if true {
  
  
          }
  
  
      }
  
      override func viewDidLoad() {
          super.viewDidLoad()
          // Do any additional setup after loading the view, typically from a nib.
          self.configureView()
      }
  
      override func didReceiveMemoryWarning() {
          super.didReceiveMemoryWarning()
          // Dispose of any resources that can be recreated.
      }
  
  
      var fetchedResultsController: NSFetchedResultsController {
          if _fetchedResultsController != nil {
              return _fetchedResultsController!
              }
  
              let fetchRequest = NSFetchRequest()
              // Edit the entity name as appropriate.
              let team = NSEntityDescription.entityForName("Teams", inManagedObjectContext: self.managedObjectContext)
              fetchRequest.entity = team
  
              // Set the batch size to a suitable number.
              fetchRequest.fetchBatchSize = 20
  
              // Edit the sort key as appropriate.
              let sortDescriptor = NSSortDescriptor(key: "teamName", ascending: false)
              let sortDescriptors = [sortDescriptor]
  
              fetchRequest.sortDescriptors = [sortDescriptor]
  
              // Edit the section name key path and cache name if appropriate.
              // nil for section name key path means "no sections".
              let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: "Master")
              aFetchedResultsController.delegate = self
              _fetchedResultsController = aFetchedResultsController
  
              var error: NSError? = nil
              if !_fetchedResultsController!.performFetch(&amp;error) {
                  // Replace this implementation with code to handle the error appropriately.
                  // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
                  //println("Unresolved error \(error), \(error.userInfo)")
                  abort()
              }
  
              return _fetchedResultsController!
      }    
      var _fetchedResultsController: NSFetchedResultsController? = nil
  
  
  
      func insertNewObject(sender: AnyObject) {
          let context = self.fetchedResultsController.managedObjectContext
          let team = self.fetchedResultsController.fetchRequest.entity
          let newManagedObject = NSEntityDescription.insertNewObjectForEntityForName(team.name, inManagedObjectContext: context) as Teams
  
          // If appropriate, configure the new managed object.
          // Normally you should use accessor methods, but using KVC here avoids the need to add a custom class to the template.
          newManagedObject.setValue("Lagur Namnurk", forKey: "teamName")
  
          newManagedObject.addEventToTeam(self.detailItem as Event)
  
  
          // Save the context.
          var error: NSError? = nil
          if !context.save(&amp;error) {
              // Replace this implementation with code to handle the error appropriately.
              // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
              //println("Unresolved error \(error), \(error.userInfo)")
              abort()
          }
      }
  
  
  
  }
  </code></pre>
  
  <p>Error message:</p>
  
  <pre><code>2014-08-13 18:38:46.651 Score Calculator 2[10538:829319] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet intersectsSet:]: set argument is not an NSSet'
  *** First throw call stack:
  (
      0   CoreFoundation                      0x00000001028a53e5 __exceptionPreprocess + 165
      1   libobjc.A.dylib                     0x00000001043b8967 objc_exception_throw + 45
      2   CoreFoundation                      0x000000010280fc6c -[NSSet intersectsSet:] + 940
      3   Foundation                          0x0000000102d0c4a6 NSKeyValueWillChangeBySetMutation + 156
      4   Foundation                          0x0000000102c804fa NSKeyValueWillChange + 386
      5   Foundation                          0x0000000102d0c3fb -[NSObject(NSKeyValueObserverNotification) willChangeValueForKey:withSetMutation:usingObjects:] + 310
      6   CoreData                            0x00000001024178d7 -[NSManagedObject(_NSInternalMethods) _includeObject:intoPropertyWithKey:andIndex:] + 551
      7   CoreData                            0x0000000102418294 -[NSManagedObject(_NSInternalMethods) _maintainInverseRelationship:forProperty:forChange:onSet:] + 276
      8   CoreData                            0x0000000102416ef2 -[NSManagedObject(_NSInternalMethods) _didChangeValue:forRelationship:named:withInverse:] + 562
      9   Foundation                          0x0000000102c835d6 NSKeyValueNotifyObserver + 356
      10  Foundation                          0x0000000102c827fd NSKeyValueDidChange + 466
      11  Foundation                          0x0000000102d0c7ee -[NSObject(NSKeyValueObserverNotification) didChangeValueForKey:withSetMutation:usingObjects:] + 118
      12  CoreData                            0x00000001024180b0 -[NSManagedObject didChangeValueForKey:withSetMutation:usingObjects:] + 80
      13  CoreData                            0x000000010242fa11 -[_NSNotifyingWrapperMutableSet addObject:] + 161
  </code></pre>
  
  <p></p>
  
  <p>edit: a couple of clarifications. Teams and Event have a multi-to-multi, unordered relationship.</p>