前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >No visible @interface for '***' declares the selector '***'

No visible @interface for '***' declares the selector '***'

作者头像
韦弦zhy
发布2020-12-09 11:02:23
2.1K0
发布2020-12-09 11:02:23
举报

今天写代码遇到一个如下编译错误: No visible @interface for 'IVDevMgr' declares the selector 'setTimeZoneWithTimeZone:to:responseHandler:'

正常来说是一个很常见的bug,即

  • IVDevMgr这个类没有定义这个方法。
  • 引用Framework 的 searchPath 有问题。
  • 没有清除缓存
  • ...

但是之所以今天要在记录一下,是因为遇到了一种新的情况。。。。找了半天 IVDevMgr 是一个静态 Framework, 有如下方法:

代码语言:javascript
复制
/// 设置设备时区
/// - Parameters:
///   - timeZone: 时区
///   - device: 设备id
///   - responseHandler: 回调
func setTimeZone(_ timeZone: Float, to device: String, responseHandler: ((_ error: Error?) -> Void)?) {
      ...
}

这是一个给设备设置时区的方法,很简单,代码中也正常使用:

代码语言:javascript
复制
IVDevMgr.shared.setTimeZone(8, to: deviceId) { (error) in
   ...
}

之所以会遇到编译错误,是我在OC代码中使用了它

代码语言:javascript
复制
[IVDevMgr.shareInstance setTimeZoneWithTimeZone:8 to:deviceId responseHandler:nil];

能正常联想,但是就编译报错,最坑的是另一个方法能够正常调用:

代码语言:javascript
复制
/// 读取设备时区
/// - Parameters:
///   - device: 设备id
///   - responseHandler: 回调
func getTimeZone(of device: String, responseHandler: ((_ timeZone: Float, _ error: Error?) -> Void)?) {
    ...
}

即:

代码语言:javascript
复制
[IVDevMgr.shareInstance getTimeZoneOf:device.contactId responseHandler:nil];

这个时候我真的是黑人问号了。。。

Why???

最终找到了元凶:“_” 你没看错,就是它,因为这个库是 Swift 写的,主要也是给Swift 调用,省略这个标签可以让代码好看且整洁,自然而然就这样用了。。。结果,

也许是Xcode的bug 吧, 直接去掉,OC代码不用动,正常编译~~~

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Why???
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档