게시글
질문&답변
2024.05.22
Local Notification 예제 문의
안녕하세요 랑프님. 앱이 활성화될 때마다 UIApplication.shared.applicationIconBadgeNumber = 0 으로 뱃지가 초기화되므로, 로컬 알림을 여러 번 발송해도 모든 알림이 뱃지 값이 1인 상태로 도착합니다. 이는 알림의 뱃지 값이 항상 초기화되기 때문에 발생합니다. 이를 해결하기 위해서 UserDefaults 를 사용해서 뱃지 값을 저장하고 불러오는 방법을 사용하면 됩니다. 수정된 코드는 다음과 같습니다. *수정한 부분만 사진으로 올려드리고 전체 코드는 맨아래 있습니다. 앱이 종료 되어도 뱃지값 저장하기 (사진) CancelNotifiactaion 에서 값 초기화 (사진) View에서 화면이 나타날때 reset 하는거 삭제 (사진) 수정된 코드 class NotificationManager { static let instance = NotificationManager() // 인스턴스 생성 func requestAuthorization() { let option: UNAuthorizationOptions = [.alert, .sound, .badge] // UserNotification 접근 UNUserNotificationCenter.current().requestAuthorization(options: option) { (success, error) in if let error = error { print("에러: \(error)") } else { print("성공") } } } func scheduleNotification() { // UserDefaults 에다가 자장할 currentBadgeCount let currentBadgeCount = UserDefaults.standard.integer(forKey: "badgeCount") // 값을 1씩 증가 시킴 let newBadgeCount = currentBadgeCount + 1 // 증가한다음에서는 값을 저장 UserDefaults.standard.set(newBadgeCount, forKey: "badgeCount") // notification 내용 설정 let content = UNMutableNotificationContent() content.title = "Local Notification 테스트 1" content.subtitle = "앱 알람 테스트 중입니다" content.sound = .default content.badge = NSNumber(value: newBadgeCount) // 1씩 증가 시킴 // Trigger 2가지 종류 // 1.시간 기준 : Interval - 몇 초 뒤에 울릴것인지 딜레이 설정 repeats 반복 여부 설정 (최소 1분이여지 반복이 돔) let timeTrigger = UNTimeIntervalNotificationTrigger(timeInterval: 5.0, repeats: false) // 2.날짜 기준 : DateMating 은 DateComponent 기준맞는 알림 var dateComponents = DateComponents() dateComponents.hour = 8 // hour 를 24시간 기준 dateComponents.minute = 30 dateComponents.weekday = 1 // 1은 일요일이 되고, 6은 금요일이 됨 // let calendarTigger = UNCalendarNotificationTrigger(dateMatching: dateComponents, repeats: true) // 설정한 값을 NotificationCenter 에 요청하기 let request = UNNotificationRequest( identifier: UUID().uuidString, // 각각의 request ID 값 String 을 uuid 값으로 설정 content: content, trigger: timeTrigger) UNUserNotificationCenter.current().add(request) } // 생성된 Notification Cancel 하기 func cancelNotification() { // peding notification 은 tigger 상에서 만족된 조건이 되어도 더이상 notification 되지 않게 하기 UNUserNotificationCenter.current().removeAllPendingNotificationRequests() // 아이폰 상태바를 내렸을때 남아있는 notification 없애기 UNUserNotificationCenter.current().removeAllDeliveredNotifications() // Cancel 하면 UserDefault 값 초기화 하기 UserDefaults.standard.set(0, forKey: "badgeCount") UIApplication.shared.applicationIconBadgeNumber = 0 } } struct LocalNotificationInter: View { @Environment(\.scenePhase) var scenePhase var body: some View { VStack (spacing: 40) { Button { NotificationManager.instance.requestAuthorization() } label: { Text("권한 요청하기") .font(.title2) .fontWeight(.semibold) .foregroundColor(.black) .padding() .background(Color.green) .cornerRadius(10) } Button { NotificationManager.instance.scheduleNotification() } label: { Text("Time Notification") .font(.title2) .fontWeight(.semibold) .foregroundColor(.black) .padding() .background(Color.green) .cornerRadius(10) } Button { NotificationManager.instance.scheduleNotification() } label: { Text("Calendar Notification") .font(.title2) .fontWeight(.semibold) .foregroundColor(.black) .padding() .background(Color.green) .cornerRadius(10) } Button { NotificationManager.instance.cancelNotification() } label: { Text("Notification 취소하기") .font(.title2) .fontWeight(.semibold) .foregroundColor(.black) .padding() .background(Color.green) .cornerRadius(10) } } //: VSTACK // schne 이 나타 날때 Badge 0 으로 초기화 하기 .onChange(of: scenePhase) { newValue in if newValue == .active { // 0으로 초기화 되지 않게 reset 하지 않기 // UIApplication.shared.applicationIconBadgeNumber = 0 } } } }
- 0
- 2
- 32
질문&답변
2024.05.22
Local Notification 강의 편집오류 있어요
안녕하세요 랑프님. 컷편집 오류 확인하였습니다. 원본파일에서 다시 수정하여 재 업로드 하겠습니다. 감사합니다
- 0
- 2
- 42
질문&답변
2024.05.22
강의중 코드폴딩 단축키 (커맨트+옵션+왼쪽방향키)
안녕하세요 랑프 님. 강의의 내용에 대해 혼동을 드려서 죄송합니다. 단축키 부분 수정하여서 재업로드 하겠습니다. 감사합니다.
- 0
- 2
- 59
질문&답변
2024.05.22
갤러리에서 슬라이더 변경시 gridSwitch 가 두번 실행됩니다.
안녕하세요 랑프님 코드를 질문 주신 코드 확인하였습니다. 자답 올려주신 부분 중복 호출 방지해서 해결하신 부분 알려주셔서 감사합니다. 예제 코드 수정하여서 재 업로드 하겠습니다.
- 0
- 2
- 47
질문&답변
2024.05.22
scrollTransition 에서 phase 값을 찍어보고 싶습니다.
안녕하세요 랑프님. 먼저 강의에서 설명이 부족한점 죄송합니다 제가 확인한 결과 직접적으로 phase 를 콘솔에 print 해서 출력하는것을 여러 방법으로 시도 해봤으나 phase.value 값을 .scrollTransition 밖으로 return 해서 밖으로 빼내야 되는데 클로져가 아님에 따라 .scrollTransition 자체 API 에서 지원하지 않는거 같습니다. phase.value 의 값의 정의는 다음과 같습니다. phase.value 의 속성 범위는 -1 부터 1까지의 전환 숫자 단계를 가리킵니다. -1 : 스크롤의 위쪽이나 왼쪽에 완전히 넘어갔을 경우 0 : 뷰에 완전히 표시되었을때 1 : 스크롤의 아래쪽이나 오른쪽으로 완전히 넘어갔을 경우 그래서 opacity 에서 넘어갈때와 나타날때 을 phase.value 값을 적용해서 스크롤시 transition 효과가 나타나게 됩니다. 더 자세한 참고는 아래 링크를 확인해 주세요 감사합니다 https://farhanadji.medium.com/exploring-swiftui-scrollview-updates-from-wwdc-2023-2c69c7a813cc
- 0
- 2
- 33
질문&답변
2024.05.16
유튜브 영상 플레이시 워닝 이슈 문의
안녕하세요 랑프님. 질문주신 Warnning log message 는 Webkit 에서 플레이 작동시 Multitask 및 background 상에서 재생할때 여러가지 경고 메세지 인것 같습니다. 실제 기기상에서 구동시 문제가 없었기 때문에 강의를 제작하였지만, 무슨이유에서 나타나는지 잘 모르겠지만, Webkit 로그메세지에 관련해선 제가 좀 더 찾아보고 알려 드리겠습니다. 감사합니다.
- 0
- 1
- 66
질문&답변
2024.05.16
ListBasic 강의 문의 - 딸기 id 오류 및 move 오작동
안녕하세요 랑프 님. 질문주신 List 에서 프리뷰에서 원래 위치도 돌아가고 디바이스에서 정상작동 되었는데 Preview 상의 Error 로써 Preview는 말 그대로 미리 확인용으로 간단하게 코드 변경시, 확인 용도입니다. 실제 기능구현은 Simulator 상에서 주로 이뤄지기 때문에 Simulator 에서 확인 부탁 드립니다. ForEach , String, ModifiedContent >: the ID 딸기 occurs multiple times within the collection, this will give undefined results! 위 에래 메세지는 ForEach 반복문시 같은 ID 값이 있을경우 값이 충돌 할 수 있다는 경고 메세지 입니다. 예시로 ForEach 구문에 id:\.self 를 사용해서 자신의 이름이 ID 가 되게끔 했습니다. 딸기 가 지속적으로 추가시 ID 가 딸기가 여러번이라 충돌이 발생합니다. 강의에서는 List 에서 Edit, Add, delete 을 어떻게 적용하는지에 대해서 간단히 설명 하였지만, 실제는 Model 에서 ID 값을 각각 지정해주고 그것을 반복문 사용해서 사용해줘야 합니다. 추후 강의나, 프로젝트에서 ID 를 사용하면 위와 같은 Message 는 나오지 않습니다. 감사합니다
- 0
- 1
- 56
질문&답변
2024.05.16
LazyGrid 강의 문의 - 데이터가 30개 인데 로우가 3줄이면 27개만 노출됨
안녕하세요 랑프 님. 질문주신 LazyGridBasic2 에서 30을 입력 했는데 Preview 상에서 27 까지만 나오는 것을 확인 했습니다. Simulator 로 확인한 결과 마지막 30까지 출력이 되었습니다. 가끔 Preivew 에서 특정 error 로 인해 정확히 구현 되지 않는 기능들도 있기 때문에 발생되는거 같습니다. cmd + R 으로 파일을 빌드 하셔서 Simulator 상에서 확인 부탁드립니다 감사합니다. (사진) (사진)
- 0
- 1
- 63
질문&답변
2024.05.03
ScrollView에서 질문 있습니다.
안녕하세요 VnPaz 님. 원래는 ForEach 반복문 사용시 Object 마다 ID 값을 부여하고, identifiable 값이여야 합니다. 원래 Int 타입으로 반복분 사용시 Xcode 에서 자동으로 배당되어 error 가 발생되지 않아 예제나, 강의에서 생략된것이 있습니다. id: \.self 을 적어서 적용하시면 아마 error 가 발생되지 않으실 겁니다. 감사합니다. (사진)
- 0
- 1
- 57
질문&답변
2024.03.23
코어데이터에 중복값 입력 방지
안녕하세요 hooyoung.paul.lee 님. CoreData 의 단점으로써 중복되 값의 입력을 방지하는 Unique 키가 없기 때문에 Code 상에서 중복 확인의 로직을 넣어 줘야 합니다. 저도 처음에 CoreData 사용하면서 많이 해맸던 부분인데요 Crete 하면 Entity 가 중복으로 생성되어 2개가 나오곤 했습니다. 결국 해결방법은 CoreData 가 생성될때마다 기존에 중복되는 값이 있는지 확인하고 없는 경우에만 Update 하라고 Logic 을 설정하는것이 안전합니다. 그래서 강의 Project - Coffee Stamp APP 을 보시면 Create, Delete, Update Data 부분 강의를 참조하시어 기존에 있을때 중복값이 저장되지 않게 Logic 을 넣으시면 됩니다. 감사합니다 Jacob
- 0
- 1
- 91