我对这个问题进行了很多研究,但没有找到任何能引导我解决的问题。我正在尝试使用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
,它运行正常。
答案 0 :(得分:1)
在获取请求上使用排序描述并将部分密钥路径更改为nil之后,我解决了这个问题。我甚至可以将部分键路径更改回日期。日期并且运行正常。我的错误是在其他地方或以某种方式与Section键路径相关联。
答案 1 :(得分:0)
您的托管上下文为零。因此你什么都得不到。这就是为什么它没有初始化,应该有一个上下文,否则对象不能传播......