我正在使用Three20作为iphone,我试图通过使用类类别来改变其中的方法。它编译得很好,但我从来没有达到它的断点。
我假设类类别会影响该类的所有实例,因此我不必重新编译静态库以使其工作。
我也知道我正在使用的类用于类别,因为如果我在接口和实现类别时在类名末尾添加'x',编译器就会失败。
这里的任何指导都非常感激。
答案 0 :(得分:11)
正如here所指出的那样,您需要在应用程序的Other Linker Flags中设置-all_load选项,以便在iPhone OS 3.0中将类别链接到静态库。 -ObjC也应该这样做,但它不适用于当前的SDK。从Xcode 4.2中的LLVM编译器开始,他们修复了阻止-ObjC的其他链接器标志正常工作的链接器错误,所以你不再需要使用-all_load(它有一些令人讨厌的副作用)。 -ObjC应该是您从静态库中获取类别所需的全部内容。
这可能会导致您的问题,但我认为Three20要求设置链接器标志,以便它首先与您的应用程序正确链接,因此您可能已经有了这些标志。
答案 1 :(得分:0)
当两个类在同一个二进制文件中对同一个类重写相同的方法时,不会定义哪个重写优先。为获得最佳结果,请创建一个子类,然后覆盖该方法。或者,由于Three20是Apache许可的,您可以在库中进行更改。
答案 2 :(得分:0)
我有一个链接到静态库的项目,是的,在使用3.0 sdk的设备上安装时需要-all_load标志。 -ObjC就是模拟器所需的一切。