2

我有一个 Swift 框架,它通过 Cocoapods 进行管理,并包含如下扩展:

public extension UIImage {
    public static func maskedImageWithColor( color: UIColor, forImageNamed image: UIImage) {
        // Implementation
    }
}

当我在我的主应用程序中用 Objective C 编写它时,我没有收到编译器错误或警告。

// No problems here!
[UIImage maskedImageWithColor:UIColor.blackColor() forImageNamed:@"myImage"]; 

但是,当我运行该应用程序时,它会爆发出一堆“无法识别的选择器”错误。

奇怪的是,当框架包含项目中并直接添加到构建阶段的相关部分(即不由 Cocoapods 管理)时,一切都按预期工作。

框架的其他方面——类、枚举等——也都可以正常工作,它似乎只是扩展并且只有当它们位于由 Cocoapods 管理的框架中时。

关于我可能在这里遗漏的任何想法?

4

1 回答 1

1

这是因为默认情况下链接器不会从静态库中加载类别方法。如果您要使用静态库添加类别方法(swift 中的扩展),-ObjC请在目标构建设置中添加到其他链接器标志。

在这里阅读更多

于 2015-11-04T06:00:03.870 回答