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 文件。所以就让它这样做吧,一切都会好起来的。
其他人也问过类似的问题,但是给出的答案对我没有帮助。我正在尝试使用核心数据创建一个 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 文件。所以就让它这样做吧,一切都会好起来的。