Hey, I wasn't able to find any better title for this topic, so I went with the simples one. I've noticed that one of my top-level reducers receives multiplied amount of the same action according to the amount of times
sheet has been presented on the screen... I know it sounds ridiculous, so let me describe it thoroughly.
I have a top-level set of components (
DevicesAction etc.). They're responsible for handling communication with BLE sensors, getting data from them and everything related to this connectivity. In my top
View I have a
Button which shows
sheet in which I start scanning for the nearby devices and also I can select there device (If found) to be stored for the future. So every time this
sheet is being presented I trigger an action called
startScanning which returns following
return environment.manager .startScanning(deviceType: .FeverDevice) .receive(on: environment.mainQueue) .catchToEffect() .map(DevicesAction.discoveredDevice)
And this is the
case let .discoveredDevice(.success(discoveredDevice)): print(discoveredDevice) return .none
Everything abovementioned works fine, so
sheet is being presented and after a while, I can see something like being printed in the console:
I close the
sheet, stop scanning and trigger the same scenario once again - tap button,
sheet is being presented and starts scanning for the nearby devices, but this time as a result I can see:
<DeviceToolUseClass: 0x28284d700> <DeviceToolUseClass: 0x28284d700>
I guess the important part is that results are duplicated. Not two different object, but exactly the same thing multiplicated by the amount of times
sheet's been on the screen.
This situation repeats and each time I can see more devices being discovered and number always reflect the count of times
sheet has been presented. I've checked my
Manager class which is being passed through
Environemnt and it triggers
send new device only once (It's a
PassthroughSubject), so at this stage everything's fine. Duplication begins when I reach TCA layer. I've put
print() on my
Publisher and it shows me like a new subscription is being created each time I open
sheet. Can I somehow cancel old subscriptions?
I'm losing my sanity right now because everything I'm sure this implementation should work just fine.