我在watchos2上有一个智能手表应用程序。该应用程序始终有效,但现在启动时我立即收到此错误:
Lop_WatchKit_Extension[17535:7854201] *********** ERROR -[SPRemoteInterface _interfaceControllerClientIDForControllerID:] clientIdentifier for interfaceControllerID:447E0002 not found
我在stackoverflow上找到了一些主题,但没有解决问题。
答案 0 :(得分:4)
在我的情况下,这是由于我的一个InterfaceController
中的保留周期。
如果你得到的日志类似于:
[默认] - [SPRemoteInterface _interfaceControllerClientIDForControllerID:]:0000:ComF:interfaceControllerID的clientIdentifier: XXXXXXXX 未找到
&安培; /或...
[default] _SendRecordedValues:000:ComF:< -Plugin controller 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)")
}
//...
}
此日志:
[Target.Classname:0xYYYYYYYY]具有接口控制器ID XXXXXXXX
确定导致这些日志的InterfaceController
后,您可以继续进行调试。
在你的情况下可能会有所不同,但在我的情况下,我在我的一个闭包中创建了一个保留周期self
,其中需要一段时间才能找到,但我最终用[weak self]
打破了保留周期捕获。
基本上,当InterfaceController
尝试执行某些代码但已经发布时,会出现错误日志。
我已经拥有的东西:
DispatchQueue.main.async {
self.doSomethingThatDoesSomethingAsync()
}
我修正了什么:
DispatchQueue.main.async { [weak self] in
self?.doSomethingThatDoesSomethingAsync()
}
答案 1 :(得分:0)
您是否更改了模块的名称?如果是这种情况,那么您必须浏览故事板并手动更新所有接口。
使用要修复的步骤进行编辑:
转到故事板,为每个界面打开Identity检查器,然后删除Module中的内容并按Enter键,新模块应自动填充。
答案 2 :(得分:0)
如果在任何IBOutlet上使用cryptojs
,也会在日志中引发此错误。
didSet
答案 3 :(得分:0)
@nickromano 多么悲伤,当您将 didSet
与 IBOutlets
一起使用时会发生这种情况。因为它在 awake(withContext context: Any?)
之前调用
如果将其包装在 DispatchQueue.main.async
@IBOutlet var statusLabel: WKInterfaceLabel! {
didSet {
DispatchQueue.main.async {
self.statusLabel.setHidden(true)
}
}
答案 4 :(得分:0)
这种情况在我身上发生过几次,而且更多次,这是因为我没有抓住一个计时器,该计时器仍在之前刚刚关闭的 WKInterfaceController 中触发。
除了在@staticVoidMan 的回答中比较 ID 之外,最好的做法是读取调用堆栈。就我而言,我能够根据这些提示确定旧计时器仍在触发:
<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule \.(js|css|jpeg|jpg|gif|png|ico|map)(\?|$) /404error.php [L,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
RewriteRule ^/article/([0-9]*).html$ /article/article.php?id=$1 [NC,L]
RewriteRule ^/relationships/([0-9]*).html$ /article/article.php?id=$1 [NC,L]
</IfModule>
这是原始调用堆栈(供参考):
8 Foundation 0x00007fff214be867 __NSFireTimer + 67
9 CoreFoundation 0x00007fff207a8e3f __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
10 CoreFoundation 0x00007fff207a8912 __CFRunLoopDoTimer + 926