fetchResultController получает NSInvalidArgumentException swift - PullRequest
0 голосов
/ 13 июня 2018

В основном я хочу получить все объекты в этой сущности. Я вызываю этот метод в 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()
    }
}

title is String?имя объекта "Напоминание" в настоящее время нет объекта в 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 голосов
/ 13 июня 2018

Что странно выглядит, что 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...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...