NSFetchedResultsController 的一个实例需要一个非零的 fetchRequest 和 managedObjectContext'

An instance of NSFetchedResultsController requires a non-nil fetchRequest and managedObjectContext'

其他人也问过类似的问题,但是给出的答案对我没有帮助。我正在尝试使用核心数据创建一个 table 视图,但我不断收到一条错误消息,指出我的 fetchRequest and/or managedObjectContext 为 nil

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)")
    }
    }

有人知道哪里出了问题吗?另外,不确定这是否重要,但我的项目是 Objective-C 和 Swift

的混合体

此外,我上面代码中的 NSLog("Request: %@, Context: %@", fetchRequest, self.coreDataContext) 打印出来:

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

我的 xcdatamodeld 中有一个名为 Movie 的实体,它具有三个字符串属性。我还在自己的 Movie.swift 文件中为这样的电影创建了一个 class:

import UIKit
import CoreData

class Movie: NSManagedObject {

}

问题是您的电影 class 没有生成提取请求的代码。

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

解决方案:完全删除电影 class 文件。

在数据模型中,将 Movie 实体配置为自动代码生成:

这样问题就解决了。 Xcode 知道如何为实体制作 class 文件。所以就让它这样做吧,一切都会好起来的。