2016-09-21 96 views
0

我在watchos2上有一个smartwatch应用程序。该应用程序总是工作,但它现在开始,当我立即得到这个错误:Watch应用程序启动错误clientIdentifier interfaceControllerID未找到

Lop_WatchKit_Extension[17535:7854201] *********** ERROR -[SPRemoteInterface _interfaceControllerClientIDForControllerID:] clientIdentifier for interfaceControllerID:447E0002 not found 

我发现了一些主题在这里计算器,但没有解决的问题。

回答

0

您是否更改了模块的名称?如果是这种情况,那么您必须通过故事板并手动更新所有您所拥有的接口。

编辑解决步骤:

转至故事板,并为每个接口打开身份检查,然后删除什么的模块,然后按回车,新的模块应该得到自动填充。

+0

模块领域是对所有interfacecontrollers空。当我点击它,然后按删除(但它是空的),然后按,它仍然不会自动填充? – user1007522

+0

你有什么设置项目文件 - >观看应用程序目标 - >生成设置 - >界面生成器故事板编译器 - >默认模块?我相信应该和InterfaceController中的一样。 – tonik12

+0

它填写了该组的名称,例如该组被称为X WatchKit应用程序,模块是X_WatchKit_App,但它是哪个?我需要检查别的东西吗? – user1007522

0

在我的情况下,这是由于一个保留周期在我的一个InterfaceController

如果您收到类似日志:

[default] -[SPRemoteInterface _interfaceControllerClientIDForControllerID:]:0000: ComF: clientIdentifier for interfaceControllerID:XXXXXXXX not found

& /或...

[default] _SendRecordedValues:000: ComF:<-Plugin controller ID XXXXXXXX has no client identifier

首先,找出哪些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)") 
    } 

    //... 
} 

此日志:一旦你确定了InterfaceController造成这些日志

[Target.Classname: 0xYYYYYYYY] has the Interface Controller ID XXXXXXXX

,您可以继续调试。

你的情况可能有所不同,但在我的情况下,我在self创建了一个保留周期,其中一个关闭期间需要一段时间才能找到,但我最终以[weak self]捕获打破了保留周期。

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


我已经有了:

DispatchQueue.main.async { 
    self.doSomethingThatDoesSomethingAsync() 
} 

我定:

DispatchQueue.main.async { [weak self] in 
    self?.doSomethingThatDoesSomethingAsync() 
}