有一个带有以下签名的BasicVIEwController类:
class BasicVIEwController: UIVIEwController,UItableVIEwDataSource,UItableVIEwDelegate
然后我们有另一个类,如ExampleVIEwController:BasicVIEwController,它有一些额外的逻辑.
现在是棘手的部分……
我们在不同的模拟器和设备上构建和运行应用程序,一切正常.然后我们存档应用程序,突然dIDSelectRow不再被解雇.深度清洁和清理项目使我们能够重现问题,而无需再次存档.
在发生这种情况时,我无法想到任何情况.而且它变得更糟,因为我发现更多类似的问题,UItableVIEwDelegate方法仅在运行存档应用程序时才在子类中调用.在归档和提交应用程序期间,这可能是一些优化问题吗?
我验证我们正确设置了表的dataSource和委托,表上没有手势识别器.在第二次/第三次运行应用程序后,相同的逻辑运行良好,但在深度清理项目后第一次失败.
我们做了一个测试并在子类中设置了UItableVIEwDataSource和UItableVIEwDelegate,然后每次都按预期工作.似乎继承协议不能很好地工作.如果我们将协议保留在父级中并将它们添加到子类中,那么它表示子类中的协议是冗余的.
有没有人经历过类似的事?欢迎任何建议.
解决方法 您可能在Swift 5.0编译器中运行到 https://bugs.swift.org/browse/SR-10257.如果您至少有三个文件,则会发生这种情况:> BasicVIEwController.swift
> SomeOtherfile.swift
> ExampleVIEwController.swift
如果SomeOtherfile.swift对AnyObject类型的值进行任何调用,那么您将在整个模块模式下进行编译,并且文件按上述顺序传递给编译器(SomeOtherfile.swift位于两者的中间),然后似乎编译器无法正确推断@ objc-ness执行func tableVIEw(_:,dIDSelectRowAt :).您现在可以通过使用@objc显式标记它来解决它.
总结以上是内存溢出为你收集整理的ios – 带Swift 5.0编译器的Xcode 10.2 – 协议继承问题全部内容,希望文章能够帮你解决ios – 带Swift 5.0编译器的Xcode 10.2 – 协议继承问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)