<!--
{
  "availability" : [
    "iOS: 16.4.0 -",
    "iPadOS: 16.4.0 -",
    "macCatalyst: 16.4.0 -",
    "macOS: 13.3.0 -",
    "tvOS: 16.4.0 -",
    "visionOS: 1.0.0 -",
    "watchOS: 9.4.0 -"
  ],
  "documentType" : "symbol",
  "framework" : "Matter",
  "identifier" : "/documentation/Matter/MTRDeviceControllerDelegate",
  "metadataVersion" : "0.1.0",
  "role" : "Protocol",
  "symbol" : {
    "kind" : "Protocol",
    "modules" : [
      "Matter"
    ],
    "preciseIdentifier" : "c:objc(pl)MTRDeviceControllerDelegate"
  },
  "title" : "MTRDeviceControllerDelegate"
}
-->

# MTRDeviceControllerDelegate

```
protocol MTRDeviceControllerDelegate : NSObjectProtocol
```

## Topics

### Instance Methods

[`func controller(MTRDeviceController, commissioningComplete: (any Error)?)`](/documentation/Matter/MTRDeviceControllerDelegate/controller(_:commissioningComplete:))

[`func controller(MTRDeviceController, commissioningComplete: (any Error)?, nodeID: NSNumber?)`](/documentation/Matter/MTRDeviceControllerDelegate/controller(_:commissioningComplete:nodeID:))

[`func controller(MTRDeviceController, commissioningComplete: (any Error)?, nodeID: NSNumber?, metrics: MTRMetrics)`](/documentation/Matter/MTRDeviceControllerDelegate/controller(_:commissioningComplete:nodeID:metrics:))

[`func controller(MTRDeviceController, commissioningSessionEstablishmentDone: (any Error)?)`](/documentation/Matter/MTRDeviceControllerDelegate/controller(_:commissioningSessionEstablishmentDone:))

[`func controller(MTRDeviceController, readCommissioningInfo: MTRProductIdentity)`](/documentation/Matter/MTRDeviceControllerDelegate/controller(_:readCommissioningInfo:))

[`func controller(MTRDeviceController, statusUpdate: MTRCommissioningStatus)`](/documentation/Matter/MTRDeviceControllerDelegate/controller(_:statusUpdate:))

### Instance Methods

[`func controller(MTRDeviceController, commissioneeHasReceivedNetworkCredentials: NSNumber)`](/documentation/Matter/MTRDeviceControllerDelegate/controller(_:commissioneeHasReceivedNetworkCredentials:))

Notify the delegate that we have successfully communicated the network
credentials to the device being commissioned and are about to tell it to join
that network.  Note that for devices that are already on-network this
notification will not happen.

[`func controller(MTRDeviceController, commissioningComplete: (any Error)?, nodeID: NSNumber?, metrics: MTRMetrics, context: [String : Any])`](/documentation/Matter/MTRDeviceControllerDelegate/controller(_:commissioningComplete:nodeID:metrics:context:))

Notify the delegate when commissioning is completed.

[`func controller(MTRDeviceController, read: MTRCommissioneeInfo)`](/documentation/Matter/MTRDeviceControllerDelegate/controller(_:read:))

Notify the delegate when commissioning infomation has been read from the commissionee.

[`func controller(MTRDeviceController, suspendedChangedTo: Bool)`](/documentation/Matter/MTRDeviceControllerDelegate/controller(_:suspendedChangedTo:))

Notify the delegate when the suspended state changed of the controller, after this happens
the controller will be in the specified state.

[`func devicesChanged(for: MTRDeviceController)`](/documentation/Matter/MTRDeviceControllerDelegate/devicesChanged(for:))

Notify the delegate when the list of MTRDevice objects in memory has changed.

## Relationships

### Inherits From

[`NSObjectProtocol`](/documentation/ObjectiveC/NSObjectProtocol)

---

Copyright &copy; 2026 Apple Inc. All rights reserved. | [Terms of Use](https://www.apple.com/legal/internet-services/terms/site.html) | [Privacy Policy](https://www.apple.com/privacy/privacy-policy)