运行 FetchRequest 时出错(核心数据,SwiftUI)
Error when running a FetchRequest (Core Data, SwiftUI)
在将 Core Data 与 SwiftUI 一起使用时,我编译了以下代码没有问题:
@FetchRequest(
entity: MyEntity.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \MyEntity.name, ascending: true)]
) var myList: FetchedResults<MyEntity>
......
func wonderFunctio() {
let theName = "Donald-Duck"
print(#function)
......
print("myList = \(myList.count)")
let predic = NSPredicate(format: "name == %@", theName)
if FetchRequest<NSFetchRequestResult>(entity: MyEntity.entity(),
sortDescriptors: [],
predicate: predic)
.wrappedValue.count != 0 {
print("Useful message ....")
}
不幸的是,运行时出现了问题。我在 if FetchRequest 行中收到此错误。
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1eceee678)
我的代码中是否有任何看起来不合适的地方?
FetchRequest<NSFetchRequestResult>(entity...
是一个 属性 包装器,所以我认为它是无效的用法。
这里有一个可能的解决方案,直接使用 CoreData NSFetchRequest
,这似乎更适合在函数中使用
let theName = "Donald-Duck"
let request: NSFetchRequest<MyEntity> = MyEntity.fetchRequest()
request.predicate = NSPredicate(format: "name == %@", theName)
if let result = try? self.context.count(for: request), result != 0 {
// .. do anything needed
}
在将 Core Data 与 SwiftUI 一起使用时,我编译了以下代码没有问题:
@FetchRequest(
entity: MyEntity.entity(),
sortDescriptors: [NSSortDescriptor(keyPath: \MyEntity.name, ascending: true)]
) var myList: FetchedResults<MyEntity>
......
func wonderFunctio() {
let theName = "Donald-Duck"
print(#function)
......
print("myList = \(myList.count)")
let predic = NSPredicate(format: "name == %@", theName)
if FetchRequest<NSFetchRequestResult>(entity: MyEntity.entity(),
sortDescriptors: [],
predicate: predic)
.wrappedValue.count != 0 {
print("Useful message ....")
}
不幸的是,运行时出现了问题。我在 if FetchRequest 行中收到此错误。
Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1eceee678)
我的代码中是否有任何看起来不合适的地方?
FetchRequest<NSFetchRequestResult>(entity...
是一个 属性 包装器,所以我认为它是无效的用法。
这里有一个可能的解决方案,直接使用 CoreData NSFetchRequest
,这似乎更适合在函数中使用
let theName = "Donald-Duck"
let request: NSFetchRequest<MyEntity> = MyEntity.fetchRequest()
request.predicate = NSPredicate(format: "name == %@", theName)
if let result = try? self.context.count(for: request), result != 0 {
// .. do anything needed
}