我刚刚将项目升级到swift 1.2。并且连续5或6次转换为最新的Swift'动作:),我能够让它编译。 然后我的很多UI测试都失败了。这是因为我的NSFetchedResultsControllerDelegate'不再被召唤了。
在(我可能会说)一次非常幸运的尝试之后,我发现这是因为我的代表不是NSObject。所以我能够通过继承NSObject或添加@obj来修复它。
在:
class BasicFetchedResultControllerDelegate : NSFetchedResultsControllerDelegate
后:
class BasicFetchedResultControllerDelegate : NSObject, NSFetchedResultsControllerDelegate
我不认为我在更改日志中看到了与此相关的内容。导致这种情况的变化是什么? 您是否注意到其他类似的变化?
答案 0 :(得分:7)
我填写了错误报告后,我从Apple收到了这封信:
此问题的行为基于以下内容:
这是Swift 1.2中的行为更改:非Objective-C派生类中的方法将不再被隐式标记为@objc,即使它们与Objective-C协议匹配。如果您不想扩展NSObject,可以使用@objc属性显式标记方法。这在https://developer.apple.com/library/ios/releasenotes/DeveloperTools/RN-Xcode/Chapters/xc6_release_notes.html#//apple_ref/doc/uid/TP40001051-CH4-SW3的Xcode 6.3发行说明中有所描述。
答案 1 :(得分:0)
核心数据类仍然表现得像传统的Objective-C类。由于NSFetchedResultsController
是没有任何超类的@protocol
,因此Swift需要明确的NSObject
声明。
你是对的,在更改日志中没有任何相关内容。