当前的 Xcode 版本 (10.2) 存在一个大问题。
有一个BasicViewController
具有以下签名的类:
class BasicViewController: UIViewController, UITableViewDataSource, UITableViewDelegate
然后我们还有另一个类ExampleViewController: BasicViewController
其中有一些额外的逻辑。
现在是棘手的部分......
我们在不同的模拟器和设备上构建并运行该应用程序,一切正常。然后我们归档应用程序,然后突然didSelectRow
不再被解雇了。项目的深度清理和清理使我们能够重现问题,而无需再次存档。
我想不出有什么情况会发生这种情况。情况变得更糟,因为我发现了更多类似的问题UITableViewDelegate
仅当运行存档的应用程序时,才不会在子类中调用方法。是否是存档和提交应用程序期间的某些优化存在问题?
我确认我们设置了dataSource
and delegate
桌子上没有手势识别器。相同的逻辑在第二次/第三次运行应用程序后运行良好,但在深度清理项目后第一次失败。
我们做了一个测试并设置了UITableViewDataSource
and UITableViewDelegate
在儿童班级中,然后每次都按预期工作。看来继承协议效果不太好。如果我们将协议保留在父类中,并将它们添加到子类中,则说明子类中的协议是多余的。
有没有人经历过类似的事情?欢迎任何建议。
您可能会遇到https://bugs.swift.org/browse/SR-10257 https://bugs.swift.org/browse/SR-10257在 Swift 5.0 编译器中。如果您至少有三个文件,就会发生这种情况:
BasicViewController.swift
SomeOtherFile.swift
ExampleViewController.swift
If SomeOtherFile.swift
拨打任何电话AnyObject
-键入的值,您正在编译wholemodule
模式,并且文件按上述顺序传递给编译器(带有SomeOtherFile.swift
在两者的中间),那么编译器似乎无法正确推断@objc
- 实施的能力func tableView(_:, didSelectRowAt:)
。您可以通过显式标记它来解决它@objc
目前。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)