Saved Core Data items are visible only after relaunching the app

105 views Asked by At
  1. RootVC.swift

    private let managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
    
    private var fetchRecordRequestController: NSFetchedResultsController = NSFetchedResultsController()
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    
    // Initialize fetch request
    fetchRecordRequestController = NSFetchedResultsController(fetchRequest: fetchRecordRequest(), managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
    fetchRecordRequestController.delegate = self
    // Fetch data from object
    do {
        try fetchRecordRequestController.performFetch()
    } catch let fetchError as NSError {
        print("(RootVC)fetchError: \(fetchError), \(fetchError.userInfo)")
    }}
    
  2. AddRuleVC.swift

// Initialize managedObjectContext for creating a new object from the input

private var managedObjectContext = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext

// Method to save the extracted values to CoreData Objects

func saveValues() {

// Setting up, to save on a private queue

let privateManagedObjectContext = NSManagedObjectContext(concurrencyType: .PrivateQueueConcurrencyType)
privateManagedObjectContext.persistentStoreCoordinator = managedObjectContext.persistentStoreCoordinator

// Initialize entity description

let RuleDescription = NSEntityDescription.entityForName("Rule",inManagedObjectContext:privateManagedObjectContext)
let rule = Rule(entity: RuleDescription!, insertIntoManagedObjectContext: privateManagedObjectContext)

// Perform Block

privateManagedObjectContext.performBlock { () -> Void in

// Set object values from temporary variables

rule.music = musicTemp! as MPMediaItemCollection
    print("musicTemp = \(musicTemp!.count)=========>saveValues")
// Save the object

    do {

    //print(NSStringFromClass((self.rule?.classForCoder)!))

            try rule.managedObjectContext?.save()
        } catch let saveError as NSError {
            print("(AddRuleViewController)saveError: \(saveError), \(saveError.userInfo)")
        }
    }
}

My RootVC is for fetching the data stored using AddRuleVC. I can save as many rules as I'd want to, but they do not show once the AddRuleVC segues back to the RootVC. They only show up after a relaunch.

0

There are 0 answers