문제 상황
NISession이 .finding에서 .found로 상태 변경이 되지 않았습니다. NISessionManager 파일을
NISession을 수정 전으로 되돌려보니 잘 넘어간다. 뭐가 문제였을까?
해결 방법
문제 상황이 일어나는 NISessionManager 코드를 뜯어보았습니다.
이전에 NISessionManager를 수정하는 과정에서, iOS 12.0에서는 지원하지 않는다. 대신에 다른 함수를 써라. 는 경고사항을 마주한 적이 있는데 여기서 코드를 unarchivedObject 로 변경하였습니다.
// 변경 전
func dataReceivedHandler(data: Data, peer: MCPeerID) {
guard let receivedData = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(data) as? TranData else {
return
}
// 변경 후
func dataReceivedHandler(data: Data, peer: MCPeerID) {
guard let receivedData = try? NSKeyedUnarchiver.unarchivedObject(ofClass: TranData.self, from: data) else {
// fatalError("Unexpectedly failed to decode discovery token.")
return
}
- unarchiveTopLevelObjectWithData는 최신의 버전이며, iOS12에는 지원이 안되므로 iOS 12.0에서는 unarchivedObject(ofClass: from:) 를 사용하라는 경고문이었습니다.
- 현재 버전에서 실행하기 위해 unarchivedObject(ofClass: from:) 를 사용하라는 말로 혼동했습니다..
- 결론은, unarchiveTopLevelObjectWithData 가 가장 최신 버전이며 iOS14부터 적용하려면 이 함수를 사용해야 한다는 것입니다.
교훈
- 에러메세지를 꼼꼼하게 잘보자
- iOS 12.0에서 와 iOS 12.0부터 는 다른 의미이다
'iOS' 카테고리의 다른 글
[Swift] Profiling 방법 (0) | 2024.02.20 |
---|---|
[iOS] NearbyInteraction란? (2) | 2024.01.13 |
[macOS] 샌드박스란? (3) | 2024.01.13 |
[macOS] SandBox 환경에서 개발 불가능한 상황 발생 (0) | 2024.01.13 |
[macOS] NSImage가 메모리에서 해제되지 않는 오류 해결 (1) | 2024.01.13 |