Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone objective-c静态库类类别,重写方法不起作用_Iphone_Objective C_Categories - Fatal编程技术网

Iphone objective-c静态库类类别,重写方法不起作用

Iphone objective-c静态库类类别,重写方法不起作用,iphone,objective-c,categories,Iphone,Objective C,Categories,我在iphone上使用Three20,我试图通过使用一个类来改变其中的一个方法。它编译得很好,但我从未达到它的断点 我假设一个类类别会影响该类的所有实例,所以我不必重新编译静态库就可以让它工作 我还知道,我用于该类别的类正在被看到,因为如果我在接口和实现该类别时在类名的末尾添加“x”,编译器将失败 非常感谢这里的任何指导。当两个类别在同一个二进制文件中重写同一类上的同一方法时,不会定义哪个重写优先。为了获得最佳结果,请创建一个子类,然后重写该子类上的方法。或者,因为Three20是Apache许

我在iphone上使用Three20,我试图通过使用一个类来改变其中的一个方法。它编译得很好,但我从未达到它的断点

我假设一个类类别会影响该类的所有实例,所以我不必重新编译静态库就可以让它工作

我还知道,我用于该类别的类正在被看到,因为如果我在接口和实现该类别时在类名的末尾添加“x”,编译器将失败


非常感谢这里的任何指导。

当两个类别在同一个二进制文件中重写同一类上的同一方法时,不会定义哪个重写优先。为了获得最佳结果,请创建一个子类,然后重写该子类上的方法。或者,因为Three20是Apache许可的,所以您可以在库本身进行更改。

正如前面所指出的,您需要在应用程序的其他链接器标志中设置-all_load选项,以便在iPhone OS 3.0中将类别链接到静态库-ObjC也应该做到这一点,但它在当前的SDK上不起作用。在Xcode 4.2中的LLVM编译器中,他们修复了导致-ObjC的另一个链接器标志无法正常工作的链接器错误,因此您不再需要使用-all_load(这有一些令人讨厌的副作用)-ObjC应该是从静态库中获取类别所需的全部


这可能会导致您的问题,尽管我认为Three20首先需要设置这些链接器标志,以便它与您的应用程序正确链接,因此,您可能已经准备好了这些标志。

我有一个链接到静态库的项目,是的,在使用3.0 sdk的设备上安装时需要-all_load标志-ObjC是模拟器所需的全部功能。

我知道我可以更改库,但我希望得到一个快速修复,我不想研究如何重新编译静态库,但我可能不得不这样做。谢谢。一个真正快速的解决方法是在运行时使用method|(get | set)实现替换该方法。+1-all_load标志帮助我解决了一个类似(但不是完全相同)的问题,尽管我已经设置了-ObjC。