2017-04-18 5 views
-1

Andere Leute haben eine ähnliche Frage gestellt, aber die Antworten haben mir nicht geholfen. Ich versuche, eine Tabellenansicht mit Kerndaten zu erstellen, und ich erhalte eine Fehlermeldung, dass mein fetchRequest und/oder managedObjectContext ist nilEine Instanz von NSFetchedResultsController erfordert eine non-nil fetchRequest und 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)") 
    } 
    } 

Hat jemand irgendwelche Ideen, was falsch ist? Auch nicht sicher, ob es darauf ankommt, aber mein Projekt ist eine Mischung aus beiden Objective-C und Swift

Auch die NSLog("Request: %@, Context: %@", fetchRequest, self.coreDataContext) aus meinem obigen Code druckt:

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

Ich habe eine Entität namens Film in mein xcdatamodeld mit drei String-Attributen. Ich habe auch eine Klasse für Film wie dieser in seiner eigenen Movie.swift Datei:

import UIKit 
import CoreData 

class Movie: NSManagedObject { 

} 
+0

Gibt es etwas Besonderes an deinem Movie-Kurs? – matt

+0

Ich habe am Ende meines ursprünglichen Posts gerade Informationen über meine Filmklasse hinzugefügt. – RobertSmith

+0

Na dann gehts. Sie haben keine Abrufanforderung. – matt

Antwort

1

Das Problem ist, dass Ihr Film Klasse keinen Code hat eine Abrufanforderung zu erzeugen.

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

Die Lösung: Löschen Sie Ihre Movie-Class-Datei vollständig.

im Datenmodell, konfigurieren Sie Ihre Film-Einheit automatische Code-Generierung zu tun:

enter image description here

, die das Problem lösen wird. Xcode weiß, wie man die Klassendateien für eine Entität erstellt. Also erlauben Sie es einfach, und alles wird gut.

+0

Vielen Dank Matt! Ich schätze die Hilfe! – RobertSmith

Verwandte Themen