fetchResult 控制器获取 NSInvalidArgumentException swift
fetchResultController get NSInvalidArgumentException swift
基本上我想获取该实体中的所有 object
我在 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()
}
}
标题是字符串?实体名称是 "Reminder"
当前在 coredata
中没有 object
执行这行代码时
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'
感谢任何帮助
这里看起来奇怪的是 title
是一个字符串?在您的排序描述符中。在大多数用例中,排序描述符是固定的,所以你应该这样做(假设 Reminder
有一个属性 title
)
request.sortDescriptors = [NSSortDescriptor(key: "title", ascending: true)]
或者更好,使用#keyPath
request.sortDescriptors = [NSSortDescriptor(key: #keyPath(Reminder.title), ascending: true)]
如果我错了并且 title 是一个可以在两次提取之间更改的变量,那么至少在使用它之前将其解包
if let sortKey = title {
request.sortDescriptors...
}
基本上我想获取该实体中的所有 object 我在 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()
}
}
标题是字符串?实体名称是 "Reminder" 当前在 coredata
中没有 object执行这行代码时
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'
感谢任何帮助
这里看起来奇怪的是 title
是一个字符串?在您的排序描述符中。在大多数用例中,排序描述符是固定的,所以你应该这样做(假设 Reminder
有一个属性 title
)
request.sortDescriptors = [NSSortDescriptor(key: "title", ascending: true)]
或者更好,使用#keyPath
request.sortDescriptors = [NSSortDescriptor(key: #keyPath(Reminder.title), ascending: true)]
如果我错了并且 title 是一个可以在两次提取之间更改的变量,那么至少在使用它之前将其解包
if let sortKey = title {
request.sortDescriptors...
}