swiftobjective-ccore-datacascading-deletesnsarraycontroller

Two NSArrayControllers bound to same NSManagedObjectContext


I have two nib files each with its own window populated by data from the same Core Data Managed Object Context (MOC) but each bound to a different array-controller. The problem is that when I delete a data object in one of the window's array-controller, it persists in the other window's array-controller even after saving the common MOC and restarting the program. To permanently remove the unwanted data object, I must remove it at each window separately. This doesn't seem the way Core Data should work. Shouldn't array controllers using the same MOC have a common source of persistent data?


Solution

  • For my setup of the bound array-controller, it is not enough to simply connect the window's 'delete' button to NSControllerArray's 'remove:' method. Instead, I subclass this method and specify a direct MOC delete of the target data-object as follows:

    - (void)remove:(id)sender
    { 
        [MOC deleteObject:[[self selectedObjects] lastObject]];
    }