본문 바로가기
iOS & macOS

[iOS] NearbyInteraction - NISession이 .finding에서 .found로 넘어가지 않는 문제 해결

by Bokoo14 2024. 1. 13.

문제 상황

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부터 는 다른 의미이다