deprecated/가족 메신저(project-ios)

[RxSwift] Reentrancy anomaly was detected. Error 대응

lgvv 2021. 9. 4. 14:59

[RxSwift] Reentrancy anomaly was detected. Error 대응

 

 

 

✅ 연관 포스팅

2021.09.04 - [분류 전체보기] - [RxSwift] Textfield maxLength

 

[RxSwift] Textfield maxLength

✅ 이번 시간에는 rx를 이용하여 텍스트 필드의 최대 글자 길이를 정하는 방법에 대해서 알아볼 예정이야. 저기 보면 년,월,일의 경우에는 글자 길이를 제한할 필요가 있어. 예를 들면, 년도의 경

rldd.tistory.com

 

✅ 발생한 에러의 Text

 

⚠️ Reentrancy anomaly was detected.

  > Debugging: To debug this issue you can set a breakpoint in /Users/hamlitjason/HappyHouse/HappyHouse/Pods/RxSwift/RxSwift/Rx.swift:96 and observe the call stack.

  > Problem: This behavior is breaking the observable sequence grammar. `next (error | completed)?`

    This behavior breaks the grammar because there is overlapping between sequence events.

    Observable sequence is trying to send an event before sending of previous event has finished.

  > Interpretation: This could mean that there is some kind of unexpected cyclic dependency in your code,

    or that the system is not behaving in the expected way.

  > Remedy: If this is the expected behavior this message can be suppressed by adding `.observe(on:MainScheduler.asyncInstance)`

    or by enqueuing sequence events in some other way.

 

✅ 에러가 발생한 상황에서 내가 작성한 코드

내가작성한 코드1

🟠 우선 나는 텍스트필드의 길이를 제한하기 위한 코드

 

그러니까 TextField는 UI관련한 것이니까 메인 스레드로 올려야하나? 이런 의심을 함.

그래서, 어떤 상황에서 에러가 뜨는지 확인해 보려고 subscribe로 바꿔보고, observe를 통해 메인 스케줄러를 직접 작성해 봄. 

그런데도 같은 오류가 뜨는 것을 확인했고, onError나 onCompleted, onDisposed가 전부 실행되지 않음.

 

내가 작성한 코드2

 

이쯤 되니까 구글링을 해야겠다고 느낌. 

구글링을 해보니까 대충 재진입하는 것에 대한 문제임을 느낌.

그리고 더 당황스러웠던 점은, 에러코드를 자세히 보면 어떤 코드를 추가하라고 적혀있었음.

그래서 결국은 해결!

 

최종 결과

 

 

✅ 에러 코드에 대한 이미지