【发布时间】: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,它会运行良好。
【问题讨论】:
-
为什么你的排序描述符键是一个空字符串。我不知道那会做什么,但这是不对的。
-
这是我尝试不同的方法来识别/解决问题时留下的。我已将其从帖子中删除。
-
您可能会看到另一个问题的副作用。你有一个异常断点吗?这将准确显示导致问题的行。见stackoverflow.com/questions/13929518/…
-
你试过没有节名键路径吗?
-
我使用了异常断点并发现它在这一行崩溃:let frc = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedContext, sectionNameKeyPath: "date.theDate", cacheName: nil)。我也尝试过将 sectionNameKeyPath 设置为 nil,但没有成功。
标签: ios swift core-data nsfetchedresultscontroller