观看应用以错误clientIdentifier开头的interfaceControllerID找不到

use*_*522 2 objective-c ios watchos-2

我在watchos2上有一个smartwatch应用程序。该应用程序始终可以运行,但是现在启动时,我立即收到此错误:

Lop_WatchKit_Extension[17535:7854201] *********** ERROR -[SPRemoteInterface _interfaceControllerClientIDForControllerID:] clientIdentifier for interfaceControllerID:447E0002 not found
Run Code Online (Sandbox Code Playgroud)

我在这里找到了一些有关stackoverflow的主题,但没有任何解决方案。

sta*_*Man 6

就我而言,这是由于我的一个人的保留周期所致InterfaceController

如果您获得类似于以下内容的日志:

[默认]-[SPRemoteInterface _interfaceControllerClientIDForControllerID:]:0000:ComF:找不到 interfaceControllerID:XXXXXXXX的 clientIdentifier

&/要么...

[默认] _SendRecordedValues:000:ComF:<-插件控制器ID XXXXXXXX没有客户端标识符

首先,找出哪个InterfaceController具有控制器ID XXXXXXXX

有这个 awake(withContext:)

override func awake(withContext context: Any?) {
    //...

    if let id = self.value(forKey: "_viewControllerID") as? NSString {
        let strClassDescription = String(describing: self)

        print("\(strClassDescription) has the Interface Controller ID \(id)")
    }

    //...
}
Run Code Online (Sandbox Code Playgroud)

记录:

[Target.Classname:0xYYYYYYYY]具有接口控制器ID XXXXXXXX

一旦确定了InterfaceController导致这些日志的原因,就可以继续进行调试。

您的情况可能会有所不同,但是在我的情况下,我self在一个关闭中创建了一个保留周期,在其中花了一段时间才找到它,但最终我被[weak self]捕获破坏了保留周期。

基本上,当an InterfaceController尝试执行某些代码但已被释放时,将显示错误日志。


我已经拥有的:

DispatchQueue.main.async {
    self.doSomethingThatDoesSomethingAsync()
}
Run Code Online (Sandbox Code Playgroud)

我修复的问题:

DispatchQueue.main.async { [weak self] in
    self?.doSomethingThatDoesSomethingAsync()
}
Run Code Online (Sandbox Code Playgroud)


ton*_*k12 0

您更改了模块的名称吗?如果是这种情况,那么您必须仔细检查故事板并为您拥有的所有界面手动更新它。

编辑修复步骤:

转到故事板,为每个界面打开身份检查器,然后删除模块中的内容并按 Enter 键,新模块应该会自动填充。