NSFetchedResultsController -[__NSArrayM insertObject:atIndex:]:对象不能为 nil
Posted
技术标签:
【中文标题】NSFetchedResultsController -[__NSArrayM insertObject:atIndex:]:对象不能为 nil【英文标题】:NSFetchedResultsController -[__NSArrayM insertObject:atIndex:]: object cannot be nil 【发布时间】:2016-02-08 03:28:53 【问题描述】:我已经对这个问题进行了大量研究,但没有发现任何可以让我找到解决方案的东西。我正在尝试使用NSFetchedResultsController
,并在运行应用程序时收到此错误:
* 由于未捕获的异常 'NSInvalidArgumentException' 导致应用程序终止,原因:'* -[__NSArrayM insertObject:atIndex:]: object cannot be nil' *** 首先抛出调用栈:
我发现有些人在使用estimatedHeightForRowAtIndexPath
方法时遇到了这个问题,但是我没有使用。
使用异常断点显示它在以下代码块中的这一行崩溃:let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedContext, sectionNameKeyPath: "date.theDate", cacheName: nil)
。它不会从这里过去。
我在它下面有一个永远不会执行的打印语句。 managedObjectContext 确实存在。 frc
第一次在 viewDidLoad 中被调用(代码如下)。我还将包括我的 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
,它会运行良好。
【问题讨论】:
为什么你的排序描述符键是一个空字符串。我不知道那会做什么,但这是不对的。 这是我尝试不同的方法来识别/解决问题时留下的。我已将其从帖子中删除。 您可能会看到另一个问题的副作用。你有一个异常断点吗?这将准确显示导致问题的行。见***.com/questions/13929518/… 你试过没有节名键路径吗? 我使用了异常断点并发现它在这一行崩溃:let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedContext, sectionNameKeyPath: "date.theDate", cacheName: nil)。我也尝试过将 sectionNameKeyPath 设置为 nil,但没有成功。 【参考方案1】:在 Fetch Request 上使用排序描述并将部分键路径更改为 nil 后,我解决了这个问题。我什至可以将部分密钥路径更改回 date.theDate 并且它会运行良好。我的错误要么在其他地方,要么与 Section 键路径有关。
【讨论】:
【参考方案2】:您的托管上下文为零。因此你什么也得不到。这就是它没有初始化的原因,应该有一个 context ,否则无法传播对象...
【讨论】:
我的托管上下文是从以前的视图控制器传递过来的。以上是关于NSFetchedResultsController -[__NSArrayM insertObject:atIndex:]:对象不能为 nil的主要内容,如果未能解决你的问题,请参考以下文章