일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- stack
- UIButton
- Git
- Realm
- JPA
- MacOS
- mac
- error
- Archive
- Session
- view
- SwiftUI
- IOS
- github
- darkmode
- Code
- 한글
- appstore
- Apple
- Python
- 웹뷰
- Xcode
- rxswift
- Notification
- Firebase
- 개발자
- Swift
- window
- iOS16
- FLUTTER
- Today
- Total
EEYatHo 앱 깎는 이야기
Swift ) iOS15 NSInternalInconsistencyException, Invalid parameter not satisfying, UITextView Error - EEYatHo 본문
Swift ) iOS15 NSInternalInconsistencyException, Invalid parameter not satisfying, UITextView Error - EEYatHo
EEYatHo 2021. 9. 26. 17:23UITextView에 커스텀 Placeholder를 적용했을 때 버그가 발생했다.
에러명 : NSInternalInconsistencyException
이유 : Invalid parameter not satisfying: pos
실제 디바이스, 시뮬레이터 iOS15에서 발생했으며,
시뮬레이터 iOS14.4에서는 발생하지 않았다...
애플아ㅏ아아아아아악
에러가 발생한 시나리오 ( Error Scenario )
UITextView에 Placeholder용도의 Text를 넣어둔다. ( text = "내용을 입력해주세요." )
아래처럼, textViewDidBeginEditing 에서 텍스트를 비워주게 코딩한다. ( text = "" or text = nil )
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.text == "입력해주세요.".localized(){
textView.text = ""
textView.textColor = UIColor.black
}
}
앱을 실행하고, UITextView를 클릭하면, Placeholder용도의 Text가 당연히 사라진다.
그런데 버튼메뉴(Paste 버튼)이 나온다. 응? ( 원래는 두번 클릭해야 나오는데..? )
그리고 Paste 버튼을 누르면 터진다. -.-?????????????
해결 과정 ( Solution )
에러명과 이유를 가지고 구글링 해도 답이 잘 안나왔다.
1. 언래핑 관련 에러라는 글도 보이고,
2. UI 업데이트를 메인 쓰레드에서 하지 않은 에러라는 글도 보이고,
3. 앱이 백그라운드에서 업데이트 되는 것을 허용해야한다는 글도 보인다.
정확히 나처럼 UITextView에 Paste 관련한 글은 보이지 않았다.
수차례 삽질을 한 결과,
아래처럼, textViewDidBeginEditing에서 text를 바꿔주는 것을 메인쓰레드에서 하니까 버튼메뉴가 나오지 않았다.
( textColor 를 바꾸는 것은, 이번 버그에서 아무런 영향력이 없었음. )
func textViewDidBeginEditing(_ textView: UITextView) {
if textView.text == "입력해주세요.".localized(){
DispatchQueue.main.async {
textView.text = ""
textView.textColor = UIColor.black
}
}
}
추측 ( Speculation )
텍스트를 바꾸는 작업도 UI작업으로 인식하고 메인쓰레드로 해야하는건가..?
아니다, textColor는 상관이 없었다. 즉 UI와는 분리할 수 있다.
UI작업은 메인쓰레드에서 해야한다는 명제와는 독립인 것 같다.
단순히 UITextView에서 버튼메뉴가 나오는 조건을 따질 때의 버그인 것 같다.
그런데 텍스트가 비어있는지 아닌지는
Paste 버튼만 나오느냐, Select 버튼들도 같이 나오느냐.
의 분기조건이다.
지금 발견한 버그는,
빈 텍스트로 바꾸는 것을 시스템이 캐치하지 못해서,
Select 버튼들이 같이 나오는 버그면 이해가 갈 것 같다.
하지만, 원래 두번눌러야 나오는 메뉴가 한번 눌러도 나오고 있으니,
무슨 연관점을 못찾겠다.
흠~~~~~~~~~~
더 생각해봐야겠따..
'iOS, Swift' 카테고리의 다른 글
Swift ) Set Custom UserAgent - EEYatHo iOS (0) | 2021.10.01 |
---|---|
Swift ) UINavigationBar shadowImage AutoHide - EEYatHo (0) | 2021.09.27 |
Swift ) 아이폰 UDID 확인 - EEYatHo iOS (0) | 2021.09.23 |
Swift ) 스플릿 뷰 감지 viewWillTransition - EEYatHo iOS (0) | 2021.09.20 |
Swift ) iPad 멀티태스킹, 스플릿뷰, 슬라이드오버 지원 -EEYatHo (0) | 2021.09.16 |