-
Could not cast value of type 'NSTaggedPointerString' to 'NSNumber'swift 2020. 4. 16. 19:23
안녕하세요..하이브리드 앱을 개발하고 있는 개발자입니다.
하이브리드앱을 개발하는건지, 제가 개발 당하고 있는건지 잘 모르겠습니다 하하...
오늘은 제가 겪은 오류를 다루어보려고 합니다.
하이브리드 앱 기반이지만 앞으로, 네이티브 쪽으로 추가될 기능이 있고 하이브리드 앱이여도 회원 정보와 같은 데이터가 필요하여
먼저, 웹과 인터페이스를 맞추는 작업을 시작했습니다.
-> let mainWebViewController = mainWebView.configuration.userContentController
mainWebViewController에 web측에서 호출할 매서드명을 등록해두었습니다.
등록 후, web에서 해당 매서드명을 콜하면,
현재 실행되는 웹에서 메세지를 받는 프로토콜 WKScriptMessageHandler 프로토콜을 채택하고 , 프로토콜에 정의된 매서드
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage)
를 준수해야지만 현재 실행되는 웹 페이지에서 온 데이터를 받을 수 있습니다.
준수한 매서드에서 "message" 전달 인자는 호출한 한수 이름을 갖고 있습니다.
그래서 저는 , 메세지 이름으로 어떤 함수가 콜할 것인지 확인하였고 로그인 성공시에는 loginSuccess(userInfo: userInfo) 웹에서 받은 user 정보를 loginSuccess(userInfo: userInfo)에서 처리하도록 하였습니다.
맨 처음에는 이렇게 접근하여 처리를 하던중,
갑작스런 오류가 발생했다. 그건 바로
Could not cast value of type 'NSTaggedPointerString' to 'NSNumber'
구글에서 검색하던 중, 좋은 정보를 찾아서 이렇게 공유하려고 합니다.
Could not cast value of type 'NSTaggedPointerString' to 'NSNumber'
I have a Swift struct like this. struct Usage { var totalData: Double var remainingTotalData: Double init(jsonData: NSData) { var jsonDict = [String: AnyObject]() do ...
stackoverflow.com
이 말을 요약해보자면,
The reason of the error is userInfo["weight"] is a String (NSTaggedPointerString is a subclass of NSString) , so you should convert String to Double.
userInfo["weight"] string형을 가졌습니다. (NSTaggedPointerString 또한 NSString의 서브클래스)
형 변환을 numberic으로 하고 싶다면, String to Int 형으로 해야한다고 합니다.
NSTaggedPointerString -> NSString -> INT , FLOAT or DOUBLE
조언대로 해보니 손쉽게 에러를 해결할 수 있었습니다.
읽어주셔서 감사합니다.
'swift' 카테고리의 다른 글
UITableVIew 동적으로 추가 / 삭제 하는 방법 (2) 2024.01.19 UITableViewDiffableDataSource, NSDiffableDataSourceSnapshot 사용해보기 (0) 2024.01.17 저장 프로퍼티 (0) 2020.03.16