diff --git a/src/darwin/Framework/CHIP/MTRDeviceController.mm b/src/darwin/Framework/CHIP/MTRDeviceController.mm index 43c2d0e7084fdc..221b4731d2dffb 100644 --- a/src/darwin/Framework/CHIP/MTRDeviceController.mm +++ b/src/darwin/Framework/CHIP/MTRDeviceController.mm @@ -535,7 +535,11 @@ - (void)removeDevice:(MTRDevice *)device - (void)setDeviceControllerDelegate:(id)delegate queue:(dispatch_queue_t)queue { + VerifyOrReturn([self checkIsRunning]); + dispatch_async(_chipWorkQueue, ^{ + VerifyOrReturn([self checkIsRunning]); + self->_deviceControllerDelegateBridge->setDelegate(self, delegate, queue); }); }