NSFetchedResultsController - [__ NSArrayM insertObject:atIndex:]:对象不能为零

时间:2016-02-08 03:28:53

标签: ios swift core-data nsfetchedresultscontroller

我对这个问题进行了很多研究,但没有找到任何能引导我解决的问题。我正在尝试使用NSFetchedResultsController,并在运行应用时收到此错误:

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

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

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

我在它下面有一个永不执行的打印声明。 managedObjectContext确实存在。在viewDidLoad(下面的代码)中第一次调用frc。我还将包含我的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)")
    }

更新

在获取请求上使用排序描述并将部分键路径更改为nil之后,我解决了这个问题。我甚至可以将部分密钥路径更改回date.theDate,它运行正常。

2 个答案:

答案 0 :(得分:1)

在获取请求上使用排序描述并将部分密钥路径更改为nil之后,我解决了这个问题。我甚至可以将部分键路径更改回日期。日期并且运行正常。我的错误是在其他地方或以某种方式与Section键路径相关联。

答案 1 :(得分:0)

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