0

我正在尝试在 SwiftUI 中的 ContentView 和 Core Data 之间使用 ViewModel。Xcode builder 运行应用程序,但我立即收到错误消息:线程 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0) for var recList。

任何人都可以帮忙吗?

以下是我正在做的一个简单示例:

列表视图模型:

class ListViewModel: ObservableObject {

    var recRequest: FetchRequest<Newdb>
    var recList: FetchedResults<Newdb>{recRequest.wrappedValue}    <-------- error appears here

    @Published var records = [ViewModel]()

    init() {
        self.recRequest = FetchRequest(entity: Newdb.entity(), sortDescriptors: [])
        fetchEntries()
    }


    func fetchEntries() {

        self.records = recList.map(ViewModel.init)
    }

}

视图模型:

class ViewModel {

    var name: String = ""

    init(db: Newdb) {
        self.name = db.name!
    }

}

内容视图:

struct ContentView: View {

        @ObservedObject var listViewModel: ListViewModel

        init() {
            self.listViewModel = ListViewModel()
        }


    var body: some View {


        ForEach(listViewModel.records, id: \.name) { index in

            Text(index.name)
        }



    }
}
4

2 回答 2

0

据我所知,FetchRequest是一个属性包装器。

它应该包装一些东西,例如;

@FetchRequest(
    entity: User.entity(),
    sortDescriptors: []
) var users: FetchedResults<User> // users are 'wrapped' in a FetchRequest instance

nil是有道理的,wrappedValue因为没有什么可以被包裹起来的

self.recRequest = FetchRequest(entity: Newdb.entity(), sortDescriptors: [])

您可能需要仔细检查其用法。

于 2020-05-09T09:54:02.723 回答
0

我注意到两件事;您的 ListViewModel 是一个 ObservableObject 但您没有任何 @Published var ...此外,在创建诸如 ListViewModel 之类的类时,您不能像在 recList 中那样使用“recRequest”,因为它尚未创建。它是在 init() 方法中创建的,而不是之前。在其他地方执行“recList = FetchedResults{recRequest.wrappedValue}”,例如在 fetchEntries() 中。

于 2020-04-25T23:26:59.197 回答