Xcode报错:’NSInvalidArgumentException’, reason: ‘An instance of NSFetchedResultsController requires a fetch request with sort descriptors’
Xcode报错:’NSInvalidArgumentException’, reason: ‘An instance of NSFetchedResultsController requires a fetch request with sort descriptors’

Xcode报错:’NSInvalidArgumentException’, reason: ‘An instance of NSFetchedResultsController requires a fetch request with sort descriptors’

在Xcode预览中发生如下报错:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'An instance of NSFetchedResultsController requires a fetch request with sort descriptors'
*** First throw call stack:
(0x194e94f20 0x18cd3b2b8 0x19cfceddc 0x1996b40b4 0x1996b3a88 0x1996b35c4 0x19a3dbefc 0x19a3dc35c 
// ....
0x199004860 0x19901061c 0x102528ed4 0x102528fd4 0x1b863b154)
libc++abi: terminating due to uncaught exception of type NSException

这一问题的原因在于:NSFtchedResultsController 实例时,提供的 NSFetchRequest 没有指定 sort descriptors(排序条件),而 NSFetchedResultsController 是强制要求有排序条件的。

排查原因    

经过排查发现,问题代码为:

@FetchRequest(
    fetchRequest: {
        let request = NSFetchRequest<YahooGoldPrice>(entityName: "YahooGoldPrice")
        return request
    }()
) var goldPrices: FetchedResults<YahooGoldPrice>

在这段代码中,由于 NSFetchedResultsController(或 SwiftUI 的 @FetchRequest 包装器)使用的 NSFetchRequest 没有设置 sortDescriptors,因此导致Xcode预览崩溃。

解决方案

给 NSFetchRequest 加上一个排序描述符,例如按时间倒序排序:

@FetchRequest(
    fetchRequest: {
        let request = NSFetchRequest<YahooGoldPrice>(entityName: "YahooGoldPrice")
        request.sortDescriptors = [NSSortDescriptor(key: "updateTime", ascending: false)]
        return request
    }()
) var goldPrices: FetchedResults<YahooGoldPrice>

注意事项

sortDescriptors 必须至少有一个。

排序字段(如 “updateTime”)必须是 Core Data YahooGoldPrice 实体中存在的属性。

   

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开发者。

欢迎加入我们的 微信交流群QQ交流群,交流更多精彩内容!
微信交流群二维码 QQ交流群二维码

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注