강의 Weak Self 코드 실행시 오류에 대해
673
작성한 질문수 3
강의에 대한 프로그램 실행을 하면 아래와 같은 에러가나고
화면상에 숫자는 "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
프리뷰에서 상태 숫자의 값은 0, 1 변경이 잘되는데 시뮤레이터 기동은 안되네요.
그리고, ios 버전이 16이상만 사용 가능 합니다. 제가 app 버전을 16.0으로 변경해서 에러를 없앤 후 실행 한겁니다.

진로에 대한 질문...!
0
41
1
Static 선언 시 에러 발생
0
46
1
클로저의 형태로 만들다
0
51
1
Function Types Error
0
43
1
안드로이드 기기 실행 오류
0
67
2
수강연장 가능할까요...
0
60
2
강의에서 사용된 안드로이드 스튜디오 버전을 알고싶어요.
0
64
2
SwiftData 미리보기 미적용
0
58
2
중괄호와 함수
0
60
2
기본 뷰 디자인이 강사님과 다릅니다.
0
57
2
Sorted, Filter, Map - UserViewModel 부분 오류 발생
0
144
1
ViewBuilder 강의 관련 질문입니다.
0
99
1
CoreData Array의 변화에 따른 SwiftUI View 변화 적용(with @Observable Macro)
0
242
2
init-deinit의 무한루핑을 벗어나는 방법이 궁금합니다.
1
210
2
Apple 공식 문서 보는법
0
360
2
5월 업데이트 예정이었던 , iOS17 컨텐츠 SwifData 업데이트 언제 되나요 ?
0
267
1
Spacer() 를 넣으니 예제처럼 SafeArea 확보가 안됩니다.
0
529
3
Local Notification 예제 문의
0
353
2
Local Notification 강의 편집오류 있어요
0
261
2
강의중 코드폴딩 단축키 (커맨트+옵션+왼쪽방향키)
0
227
2
코어데이터에 중복값 입력 방지
0
334
1
Combine 관련 질문드립니다.
0
263
1
if let else 질문있습니다.
0
242
1
SwiftData가 Core Data를 대체하는지요?
0
2136
1





