如果没有数据,带有@FetchRequest(SwiftUI)和NSPredcate的CoreData将崩溃



我有一个SwiftUI应用程序,我在其中使用@FetchRequest和谓词。只要已经有一些数据,一切都很好。

然而,当应用程序第一次安装时,用户试图在输入任何数据之前进行搜索,应用程序会崩溃,并出现以下错误:

error: SQLCore dispatchRequest: exception handling request: <NSSQLFetchRequestContext: 0x60000188c380> , unimplemented SQL generation for predicate : (username CONTAINS[cd] "r") with userInfo of (null)

我认为问题的原因是该列不存在(因为没有数据(。我想做的是在没有数据的情况下为谓词传递nil

我知道如何使用NSManagedObjectContextcount(for:),但在我需要使用@EnvironmentObject时,它并没有真正提供上下文。有人对如何处理这个问题有什么建议吗。我也看不出try-catch是如何工作的。

谢谢。

好吧,我确实有一个解决方案。它不漂亮,但确实有效。因为NSManagedObjectContext是通过@Environment传递的,所以在运行SwiftUIViewinit时它不会被初始化。因此,要获得上下文,您可以执行以下操作:

if let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext {

打电话叫伯爵进去。

所以我有时毫无头绪。我没有彻底阅读这个错误,因为它发生在我正在改变的事情的背景下,所以我认为问题在于此。但不,这不是问题所在。

问题是,当天早些时候,我将列从username重命名为其他列。但是我忘了换NSPredicate

因此,为了其他使用SwiftUI和@FetchRequest的人,如果你确实需要计算项目数量,你需要恢复到NSFetchRequest。很抱歉浪费了任何人的时间。

最新更新