SwiftUI에서 CoreData 처리 후 Preview 충돌 시 해결 방법
매혹적인 편
충돌을 미리 볼 때 다음과 같습니다.
// View
struct ContentView: View {
@Environment(\.managedObjectContext) var viewContext
@State private var isPresent: Bool = false
@Environment(\.timeZone) private var timeZone
@FetchRequest(sortDescriptors: [NSSortDescriptor(keyPath: \Todo.limitDate, ascending: true)], animation: .default)
private var todos: FetchedResults<Todo>
...
var body: some View {
...
}
}
// Model
class TodoModel: ObservableObject {
static let shared = TodoModel()
static var fetchRequest: NSFetchRequest<Todo> {
let request: NSFetchRequest<Todo> = Todo.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(keyPath: \Todo.limitDate, ascending: true)]
return request
}
static var preview: TodoModel {
let model = TodoModel(inMemory: true)
let viewContext = model.container.viewContext
viewContext.reset()
for i in 0..<10 {
let item = Todo(context: viewContext)
item.title = "Todo \(i + 1)"
item.limitDate = Date()
}
do {
try viewContext.save()
} catch {
fatalError(error.localizedDescription)
}
return model
}
let container: NSPersistentContainer
private init(inMemory: Bool = false) {
container = NSPersistentContainer(name: "TodoList")
if inMemory {
container.persistentStoreDescriptions.first!.url = URL(fileURLWithPath: "/dev/null")
}
container.loadPersistentStores { (storeDescription, error) in
if let error = error as NSError? {
fatalError("Error \(error), \(error.userInfo)")
}
}
}
...
}
SwiftUI는 CoreData에서 데이터를 가져오는 시뮬레이션이 있습니다.그걸 설치하면 왠지 미리보기가 붕괴될 것 같아.
해결편
각양각색의 조사에서 도착했다이 정보.
마지막 페이지에서
추출 요청 생성을 새 정적 변수로 이동하고 다른 @FetchRequest 잠금 레지스터를 사용하면 충돌하지 않습니다
라고 기재했기 때문에 기재한 대로 수정했다.
// Model
class TodoModel: ObservableObject {
...
// FetchRequestのstatic変数を実装
static var fetchRequest: NSFetchRequest<Todo> {
let request: NSFetchRequest<Todo> = Todo.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(keyPath: \Todo.limitDate, ascending: true)]
return request
}
...
}
// View
struct ContentView: View {
...
// 引数にModelで実装したFetchRequestを指定
@FetchRequest(fetchRequest: TodoModel.fetchRequest)
...
}
이렇게 하면 붕괴가 없고 안전하게 미리보기가 표시됩니다!🎉아직 명확한 이유는 없지만 알면 업데이트하고 싶어요.
같은 상태에서 빠져있는 사람에게 도움이 되었으면 좋겠어요.
Reference
이 문제에 관하여(SwiftUI에서 CoreData 처리 후 Preview 충돌 시 해결 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/chieta063/articles/b85882d4758be5d7b2af텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)