我有一个SwiftUI应用程序,其中使用了@FetchRequest
和一个谓词。只要已经有一些数据,一切就可以正常工作。
但是,当首次安装该应用程序并且用户尝试在输入任何数据之前执行搜索时,该应用程序因以下错误而崩溃:
error: SQLCore dispatchRequest: exception handling request: <NSSQLFetchRequestContext: 0x60000188c380> , unimplemented SQL generation for predicate : (username CONTAINS[cd] "r") with userInfo of (null)
我相信问题的原因是该列不存在(因为没有数据)。我想做的是在没有数据的情况下通过nil
作为谓词。
我了解如何使用NSManagedObjectContext
和count(for:)
,但是在需要使用@EnvironmentObject
时并没有真正使上下文可用。有谁对如何处理有任何建议。我也看不到try-catch
的工作原理。
谢谢。
答案 0 :(得分:0)
嗯,我有解决方案。它不漂亮,但确实有效。由于NSManagedObjectContext
是通过@Environment
传递的,因此它在运行SwiftUI View
init
时不会被初始化。因此,您可以执行以下操作:
if let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext {
并拨打电话以获取计数。
答案 1 :(得分:0)
所以我有时候一无所知。由于该错误是在我正在更改的上下文中发生的,因此我没有完全阅读该错误,因此我认为问题出在那。但是不,那不是问题。
问题在于,今天早些时候,我将列从username
重命名为其他名称。但是我忘了更改NSPredicate
。
因此,为了其他人使用SwiftUI和@FetchRequest
,如果您确实需要计算项目数,则需要还原为NSFetchRequest
。抱歉浪费您的时间。