티스토리 뷰
Property type 'CustomWindow *' is incompatible with type 'UIWindow * _Nullable' inherited from 'UIWindowSceneDelegate'
위 워닝은 AppDelegate는 Objective-C코드로 되어있고 CustomWindow는 Swift코드로 되어있을 때 나타나고 있습니다.
문제 상황
앱의 최상단에 뷰를 띄우기 위해 UIWindow에 뷰를 붙여서 사용하고 있었습니다.
그러나 window의 rootViewController를 바꾸게 되면 최상단에 붙어있던 뷰가 rootViewController 밑으로 들어가면서 사용자가 볼 수 없었죠.
이 문제를 해결하기 위해 rootViewController를 바꿀 때 마다 붙어있던 뷰를 bringSubviewToFront() 메소드를 이용해서 앞으로 옮겨줘야 합니다.
window.rootViewController = newViewController
window.bringSubViewToFront(topView)
매번 직접 뷰를 상단으로 옮겨오다 보면 실수하거나 다른 작업자가 누락시킬 가능성이 있겠죠.
그래서 UIWindow를 상속받아 rootViewController를 바꿀 때 bringSubviewToFront() 메소드가 함께 동작하도록 했습니다.
class CustomWindow: UIWindow {
private var topView: UIView?
override var rootViewController: UIViewController? {
didSet {
if let topView = self.topView {
self.brintSubViewToFront(topView)
}
}
}
}
AppDelegate의 window 타입도 변경했습니다.
@class CustomWindow;
@interface SceneDelegate : UIResponder <UIWindowSceneDelegate>
@property (strong, nonatomic) CustomWindow * window;
@end
Property type 'CustomWindow *' is incompatible with type 'UIWindow * _Nullable' inherited from 'UIWindowSceneDelegate'
여기에서 워닝이 나타나고 있습니다!
추측되는 원인으론 UIWindowSceneDelegate (UIApplicationDelegate)에서 스토리보드로 window의 rootViewController를 만들 경우 UIWindow 타입을 내려주는데 CustomWindow 타입으로 다운캐스팅에 대한 워닝이 나타나는 것 같습니다.
해결
아무래도 명확하게 코드를 작성할 수 없지만 AppDelegate에서 window를 UIWindow 타입으로 돌려주고 window를 사용하는 쪽에서 타입캐스팅을 하면 워닝을 제거할 수 있습니다.
if let window = appDelegate.window as? CustomWindow {
// Do Something
}
- Total
- Today
- Yesterday
- 에그타이머
- calendarView
- Alfred
- eggtimer
- 파이어스토어
- androidx
- recyclrView
- RecyclerView Swipe
- 스튜디오
- wrap_content
- 안드로이드 스튜디오
- 안드로이드 레이아웃
- intent
- 파이어베이스
- 안드로이드 여백
- 프래그먼트
- 뒤로가기
- Android Studio
- Firebase
- java
- layout
- activity
- firestore
- round border
- android
- 액티비티
- RecyclerView padding
- RecyclerView 여백
- 안드로이드
- 레이아웃
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |