강의 Weak Self 코드 실행시 오류에 대해
653
投稿した質問数 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
28
1
수강연장부탁드려도될까요..
0
42
2
Combine Playground 에서 실행 시
0
57
2
70강 - 글로벌 액터로 격리된 Protocol 을 extension 에서 conform 시 타입 본체의 격리 수준 질문
0
42
1
searchable이 화면 하단에 위치해요
0
62
2
Drawing Cycle 관련 질문
0
72
1
앱 제작 시 주로 코드로 작성하시는 이유가 있을까요?
0
95
2
델리게이트 패턴 관련 질문
0
66
2
ios 애드몹 광고
0
134
2
수강 기간 연장 부탁드릴 수 있을까요?
0
61
1
Sorted, Filter, Map - UserViewModel 부분 오류 발생
0
102
1
ViewBuilder 강의 관련 질문입니다.
0
80
1
CoreData Array의 변화에 따른 SwiftUI View 변화 적용(with @Observable Macro)
0
205
2
init-deinit의 무한루핑을 벗어나는 방법이 궁금합니다.
1
167
2
Apple 공식 문서 보는법
0
325
2
5월 업데이트 예정이었던 , iOS17 컨텐츠 SwifData 업데이트 언제 되나요 ?
0
252
1
Spacer() 를 넣으니 예제처럼 SafeArea 확보가 안됩니다.
0
490
3
Local Notification 예제 문의
0
320
2
Local Notification 강의 편집오류 있어요
0
236
2
강의중 코드폴딩 단축키 (커맨트+옵션+왼쪽방향키)
0
208
2
코어데이터에 중복값 입력 방지
0
313
1
Combine 관련 질문드립니다.
0
244
1
if let else 질문있습니다.
0
220
1
SwiftData가 Core Data를 대체하는지요?
0
2111
1

