NSFetchedResultsController -[__NSArrayM insertObject:atIndex:]: 对象不能为 nil

NSFetchedResultsController -[__NSArrayM insertObject:atIndex:]: object cannot be nil

我对这个问题做了很多研究,但没有发现任何可以引导我找到解决方案的东西。我正在尝试使用 NSFetchedResultsController,当我 运行 应用程序时出现此错误:

* 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'* -[__NSArrayM insertObject:atIndex:]: 对象不能零' *** 首先抛出调用堆栈:

我发现有些人在使用estimatedHeightForRowAtIndexPath方法时遇到了这个问题,但我没有使用它。

使用异常断点显示它在以下代码块的这一行崩溃:let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedContext, sectionNameKeyPath: "date.theDate", cacheName: nil)。它没有让它过去。

我下面有一个永远不会执行的打印语句。 managedObjectContext 确实存在。 frc 在 vi​​ewDidLoad 中第一次被调用(下面的代码)。我还将包含我的 AppDelegate 代码。

提前致谢!

这是我的相关代码:

import UIKit
import CoreData

class TransactionsViewController: UIViewController, UITableViewDataSource, NSFetchedResultsControllerDelegate {

    var containerDelegate: ContainerDelegate?

    var managedContext: NSManagedObjectContext!

    lazy var frc: NSFetchedResultsController = {
        // Initialize Fetch Request
        let fetchRequest = NSFetchRequest(entityName: "DailyTransactions")

        // Initialize Fetched Results Controller
        let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedContext, sectionNameKeyPath: "date.theDate", cacheName: nil)

        print("Assigned frc complete.")

        // Configure Fetched Results Controller
        frc.delegate = self

        print("FRC finished")

        return frc
    }()

frc 首先在 viewDidLoad 中使用:

    // Exectue Fetch Request
    do {
        try self.frc.performFetch()
    } catch {
        let fetchError = error as NSError
        print("\(fetchError), \(fetchError.userInfo)")
    }

更新:

在 Fetch Request 上使用排序描述并将部分键路径更改为 nil 后,我解决了这个问题。我什至可以将部分关键路径改回 date.theDate,它会 运行 正常。

您的托管上下文为零。因此你什么也得不到。这就是为什么它没有被初始化,应该有一个 context ,否则对象无法传播...

在 Fetch Request 上使用排序描述并将部分键路径更改为 nil 后,我解决了这个问题。我什至可以将部分关键路径改回 date.theDate,它会 运行 正常。我的错误要么在其他地方,要么在某种程度上与部分关键路径有关。