작성
·
490
0
강의에 대한 프로그램 실행을 하면 아래와 같은 에러가나고
화면상에 숫자는 "1"로 고정이 되네요.
강의 원본 소스도 같은 에러를 내보냅니다.
Xcode는 15.0.1
아이폰 모델은 15 Pro입니다
콘솔 로그
초기화 시작
Snapshotting a view (0x10b42e7e0, _UIButtonBarStackView) that is not in a visible window requires afterScreenUpdates:YES.
초기화 시작
초기화 해제
Snapshotting a view (0x10597b1c0, _UIButtonBarStackView) that is not in a visible window requires afterScreenUpdates:YES.
초기화 시작
초기화 해제
소스
//
// WeakSelfInter.swift
// SwiftUiIntermediate
//
// Created by KISOO LEE on 10/7/23.
//
import SwiftUI
// MARK: - ViewModel
class WeakSelfInterViewModel: ObservableObject {
@Published var data: String? = nil
init() {
print("초기화 시작")
let currentCount = UserDefaults.standard.integer(forKey: "count")
UserDefaults.standard.set(currentCount+1, forKey: "count")
getData()
}
deinit {
print("초기화 해제")
let currentCount = UserDefaults.standard.integer(forKey: "count")
UserDefaults.standard.set(currentCount-1, forKey: "count")
}
func getData() {
DispatchQueue.main.asyncAfter(deadline: .now() + 10) {
DispatchQueue.main.async {
self.data = "NEW DATA !"
}
}
}
}
// MARK: - Screen 1
struct WeakSelfInter: View {
@AppStorage ("count") var count: Int?
init() {
count = 0
}
var body: some View {
NavigationView {
NavigationLink("2번째 페이지로 이동"){
WeakSelfInter2()
}
.navigationTitle("1번째 페이지")
//: NavigationLink
} //: NavigationView
.overlay(
Text("\(count ?? 0)")
.font(.largeTitle)
.padding()
.background(Color.green.cornerRadius(10))
.padding()
, alignment: .topTrailing
)
}
}
// MARK: - Screen 2
struct WeakSelfInter2: View {
@StateObject var vm: WeakSelfInterViewModel = .init()
var body: some View {
VStack (spacing: 10 ) {
Text("2번째 페이지")
.font(.largeTitle)
.foregroundColor(.red)
} //: VStack
if let data = vm.data { // data에 String 값이 있는 경우
Text(data)
}
}
}
#Preview {
WeakSelfInter()
}
답변 1
0
안녕하세요 coffee1oz 님.
질문주신 코드에 관한 에러 및 1로 고정되는 현상은 NavigationView
가 Xcode 버전업과 iOS 17 버전으로 deprecated 에 대한 error 인거 같습니다. error message 에 대한 내용은 정확히 확인 할 수 없으나,
NavigationStack
으로 변경 후 시뮬레이션 실행한 결과 error message 가 없어졌으며, 포인팅되서 1이 되고 초기화 해제 함에따라 숫자가 다시 0으로 변경되는것을 확인하였습니다.
변경된 코드는 다음과 같습니다.
변경된 예제 코드도 함께 강의자료에 업로드해서 수정하였습니다.
error 가 발생된것을 알려주셔서 감사합니다
프리뷰에서 상태 숫자의 값은 0, 1 변경이 잘되는데 시뮤레이터 기동은 안되네요.
그리고, ios 버전이 16이상만 사용 가능 합니다. 제가 app 버전을 16.0으로 변경해서 에러를 없앤 후 실행 한겁니다.