Machineboy空

비컨별로 다른 화면 띄우기! 본문

언어/iOS

비컨별로 다른 화면 띄우기!

안녕도라 2024. 11. 1. 17:45

A기기 - 비컨 역할

picker로 선택한 UUID로 비콘이 생성되도록 바꾸었다.

B기기 - 비컨 탐지기 역할

감지된 UUID에 따라 색이 바뀌도록 하였다.


 

마주한 문제

class에서 변경된 값을 view에서 알아차리지 못하여, 화면이 갱신되지 않는다.

beaconDetector Class에서 감지하는 값이 바뀔 때 마다 view의 색이 바뀌어야 한다.


원인 분석1) ObservedObject 선언이 잘못되었나?

beacon: view에서 바뀌는 값을 class 에 넘겨주는 구조였고

detactor: class에서 변경된 값을 view에서 읽어서 표시하는 구조

 

class 내부에 @Published 되는 값이 변경될 때 .onChange나 다른 모디파이어 사용 없이도

view는 알아서 갱신되어야 마땅한데 안된다.

@StateObject로 바꾸어도 안된다.

 

https://velog.io/@jeunghun2/ObservedObject-StateObject-%EC%96%B8%EC%A0%9C-%EC%96%B4%EB%96%BB%EA%B2%8C-%EB%AC%B4%EC%97%87%EC%9D%84-%EC%82%AC%EC%9A%A9%ED%95%B4%EC%95%BC-%ED%95%98%EB%8A%94%EA%B0%80

 

@ObservedObject, @StateObject 언제, 어떻게, 무엇을 사용해야 하는가?

@ObservedObject, @StateObject 깔끔하게 정리

velog.io


원인 분석2) 새로 만든 객체가 아닌 단 하나의 객체로 접근해야 하나?

뭔가 내가 변하고 있는 클래스에 접근을 못하는 건가 싶어서 싱글톤으로도 바꿔보고 여러가지 시도를 했다..

 

https://babbab2.tistory.com/66

 

Swift) 싱글톤 패턴(Singleton Pattern)

안녕하세요 :) 소들입니다 이번 포스팅에선 싱글톤 패턴이 무엇이고, Swift에선 어떻게 사용되는지에 대해 알아보려고 해요!!! 왜 네트워크 하다가 갑자기 SingleTon이냐 하면 내 마음임 모든 포스팅

babbab2.tistory.com

 


원인 분석 3)뭔가 유효한 UUID가 따로 있나?

좀 더 신호 세기가 세게 잡히는 UUID가 따로 있나? 해서 UUID마다 rssi값을 디버깅해봤다.

uuid에는 문제가 없다! 랜덤 생성하는 페이지에 들어가서 uuid를 모두 변경해보았으나 똑같다. 

다만, 소문자로 설정할 경우 읽어올 때 대문자로 읽히더라!

 


결과적으로 무슨 문제였느냐... 

@Publish해주는 값을 좀 더 꺼내줘야 하는 것이었다.

@Publish beacon을 해두고 아래값을 타고 타고 들어가니 왜인지 모르겠지만 특정값만 인식하더라..

내가 원하는 uuid까지 타고 들어가서 그 값을 @Publish로 바꿔주니 너무 인식이 잘된다..

 

이걸로 무얼 할 수 있느냐!

비콘의 UUID로 장소 바꿔가며 정지한 장소에서 해당 정보가 다르게 뜨는지 확인할 수 있다!

 

해결할 문제,

비콘이 서로 가까이 있을 때, 가장 가까운 것을 탐지하도록 해야하는데 이건 아직 부족한 듯!