fetchResultController获取NSInvalidArgumentException swift

时间:2018-06-13 04:41:01

标签: ios swift core-data nsfetchedresultscontroller

基本上我想获取该实体中的所有对象 我在viewDidLoad()

中调用此方法
func updateUI() {
    if let context = container?.viewContext {
        let request:NSFetchRequest<Reminder> = Reminder.fetchRequest()
        request.sortDescriptors = [NSSortDescriptor(key: title, ascending: true)]
        fetchResultController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
        try? fetchResultController?.performFetch()
        remindersCollectionViewController.reloadData()
    }
}

标题是字符串?实体名称是&#34;提醒&#34; 目前在coredata中没有对象

执行此行代码时

fetchResultController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)

应用程序崩溃,我收到了错误

2018-06-13 12:14:25.345072+0800 Reminders[25712:3061130] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSArrayM insertObject:atIndex:]: object cannot be nil'

感谢任何帮助

1 个答案:

答案 0 :(得分:0)

这里看起来很奇怪的是title是一个字符串?在您的排序描述符中。在大多数用例中,排序描述符是固定的,所以你应该这样做(假设title有一个属性Reminder

request.sortDescriptors = [NSSortDescriptor(key: "title", ascending: true)]

甚至更好,使用#keyPath

request.sortDescriptors = [NSSortDescriptor(key: #keyPath(Reminder.title), ascending: true)]

如果我错了,title是一个可以在提取之间切换的变量,那么至少在使用它之前将其打开

if let sortKey = title {
     request.sortDescriptors...
}