Search code examples
ioscore-dataswiftnsfetchedresultscontrollernsmanagedobjectcontext

Why do I get an error that my class doesn't have an NSManagedObject property when it clearly does?


I have a UIViewController subclass, MyViewController, that has an NSFetchedResultsController and an NSManagedObjectContext. But when I go to create the NSFetchedResultsController it says I don't have a managedObjectContext property on MyViewController.

var managedObjectContext: NSManagedObjectContext!
var fetchedResultsController: NSFetchedResultsController = {
    let fetchRequest = NSFetchRequest()
    let entity = NSEntityDescription.entityForName("Post", inManagedObjectContext: self.managedObjectContext)
    fetchRequest.entity = entity
    fetchRequest.fetchBatchSize = 50
}()

Don't I clearly have a managedObjectContext variable declared right before it? What am I doing wrong?


Solution

  • The initializer of a property cannot reference another property in the same class unless you declare it as a lazy computed property.

    You also forgot to return a fetched results controller from the closure.

    var managedObjectContext: NSManagedObjectContext!
    lazy var fetchedResultsController: NSFetchedResultsController = {
        let fetchRequest = NSFetchRequest()
        let entity = NSEntityDescription.entityForName("Post", inManagedObjectContext: self.managedObjectContext)
        fetchRequest.entity = entity
        fetchRequest.fetchBatchSize = 50
        let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
        return fetchedResultsController
        }()