2017-04-18 6 views
-1

D'autres personnes ont posé une question similaire, mais les réponses données ne m'ont pas aidé. Je suis en train de créer une vue de la table avec les données de base et je reçois un message d'erreur que mon fetchRequest et/ou managedObjectContext sont nulsUne instance de NSFetchedResultsController nécessite un fetchRequest non nul et managedObjectContext '

class CustomTableViewController: UITableViewController, 
NSFetchedResultsControllerDelegate { 

var coreDataContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 


@available(iOS 10.0, *) 
fileprivate lazy var fetchedResultsController: NSFetchedResultsController<Movie> = { 
    // Initiate the query 
    let fetchRequest: NSFetchRequest<Movie> = Movie.fetchRequest() as! NSFetchRequest<Movie> 

    // Sort the data 
    fetchRequest.sortDescriptors = [NSSortDescriptor(key:"title", ascending: true)] 

    NSLog("Request: %@, Context: %@", fetchRequest, self.coreDataContext);   
    let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.coreDataContext, sectionNameKeyPath: nil, cacheName: nil) 

    fetchedResultsController.delegate = self 
    return fetchedResultsController 
}() 


override func viewDidLoad() { 
    super.viewDidLoad() 

    navigationController?.setToolbarHidden(false, animated: false) 

    do { 
     // when view loads, run the fetch (query) 
     if #available(iOS 10.0, *) { 
      try self.fetchedResultsController.performFetch() 
     } else { 
      // Fallback on earlier versions 
     } 
    } catch { 
     let fetchError = error as NSError 
     print("Unable to Perform Fetch Request") 
     print("\(fetchError)") 
    } 
    } 

Est-ce que quelqu'un a des idées ce qui ne va pas? De plus, pas sûr que ça compte, mais mon projet est un mélange des deux Objective-C et Swift

En outre, le NSLog("Request: %@, Context: %@", fetchRequest, self.coreDataContext) de mes impressions de code ci-dessus sur:

Request: (null), Context: <NSManagedObjectContext: 0x1701db4e0> 

J'ai une entité appelée Film en mon xcdatamodeld avec trois attributs String. J'ai aussi créé une classe pour le film comme celui-ci dans son propre fichier Movie.swift:

import UIKit 
import CoreData 

class Movie: NSManagedObject { 

} 
+0

Y a-t-il quelque chose de spécial à propos de votre cours de cinéma? – matt

+0

Je viens d'ajouter des informations sur mon cours de cinéma à la fin de mon message original. – RobertSmith

+0

Eh bien, vous y allez. Vous n'avez aucune demande d'extraction. – matt

Répondre

1

Le problème est que votre classe Movie n'a pas de code pour générer une demande d'extraction.

@nonobjc public class func fetchRequest() -> NSFetchRequest<Movie> { 
    return NSFetchRequest<Movie>(entityName: "Movie"); 
} 

La solution: Supprimez entièrement votre fichier de classe Movie.

Dans le modèle de données, configurez votre entité film pour faire la génération de code automatique:

enter image description here

qui résoudra le problème. Xcode sait comment créer les fichiers de classe pour une entité. Alors laissez-le faire, et tout ira bien.

+0

Merci beaucoup Matt! J'apprécie l'aide! – RobertSmith