문맥
Core Data 개체에서 작업을 수행하려면 관리 개체 컨텍스트 managedObjectContext
가 필요합니다. 컨텍스트는 SceneDelegate
"코어 데이터 사용"옵션이 선택된 상태에서 프로젝트가 생성 될 때 내부 환경 변수를 통해 뷰로 전달됩니다 (아래 참조). 관련 질문은 Core Data 컨텍스트 개체가 환경 변수를 통해 전달되어야하는 이유입니다.
let contentView = MainView().environment(\.managedObjectContext, context)
그러나 context
View Model 에 전달하려고 할 때 다음과 같은 불만이 있습니다.
속성 이니셜 라이저 내에서 인스턴스 멤버 'context'를 사용할 수 없습니다. 속성 이니셜 라이저는 'self'를 사용할 수 있기 전에 실행됩니다.
struct MainView: View {
@Environment(\.managedObjectContext) var context
// Computed property cannot be used because of the property wrapper
@ObservedObject var viewModel = ViewModel(context: context)
}
class ViewModel: ObservableObject {
var context: NSManagedObjectContext
}
init()
뷰 내에서 뷰 모델을 초기화 하기 위해를 추가하면 빌드에 실패하는 다른 오류가 발생합니다.
표현에 대한 진단을 생성하지 못했습니다. 버그 신고를 해주세요
init() {
self.viewModel = ViewModel(context: context)
}
질문
그렇다면 뷰 모델 내에서 컨텍스트를 어떻게 사용 / 가져 오기 / 전달할 수 있습니까? 뷰 모델 내에서 컨텍스트를 얻는 더 좋은 방법은 무엇입니까?
시나리오는 다음과 같습니다.
let contentView = MainView(context: context) // << inject
.environment(\.managedObjectContext, context)
struct MainView: View {
@Environment(\.managedObjectContext) var context
@ObservedObject private var viewModel: ViewModel // << declare
init(context: NSManagedObjectContext) {
self.viewModel = ViewModel(context: context) // initialize
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다