我们正在将图书馆集成到iPhone应用程序中,该应用程序似乎在内部使用谷歌的谷歌工具箱。
谷歌工具箱为NSString添加了一个方法gtm_stringBySanitizingAndEscapingForXML
。
问题是,每当我们尝试调用这个库时,我们都会得到
[NSCFString gtm_stringBySanitizingAndEscapingForXML]: unrecognized selector sent to instance 0x272478
因此,看起来该库正在NSCFString上调用该方法,该类别不适用于该方法。 那么......是不是这个类别不适用于CoreFoundation类的免费电话桥? 如果是这样,那么我们至少知道为什么它会爆炸。弄清楚如何解决它是另一回事。
答案 0 :(得分:2)
应用于NSString的类别也适用于NSCFString,因为NSCFString是NSMutableString的子类,它是NSString的子类。
但您实际上是否包含了Google工具箱库(GTMNSString+XML.m
)?
答案 1 :(得分:2)
NSCFString
类不是NSMutableString
的子类...它只是另一类NSString
集群。所以如果你有一个NSCFString
foo var并且你测试了这个:
BOOL isNSString = [foo isKindObClass:[NSString class]];
您将isNSString
NO
。
我遇到了一些问题,因为我创建了一个NSString
类别,当该类为NSCFString
或该群集中的任何其他类时,我不知道如何应用新方法...
编辑:
好的,我找到了解决方案。虽然这些测试返回NO
:
[myString isKindOfClass:[NSString class]];
[myString respondsToSelector:@selector(myNSStringCategorySelector:)];
我强制执行NSCFString
类的方法,并且它正常工作!!
我希望它能帮助别人!
答案 2 :(得分:0)
听起来这个类别的实现没有链接到您的程序中。假设您的库被编译为静态库,您可能需要将-ObjC
链接器标志添加到项目中。有关更多信息,请查看this technote。应该使用最新的Xcode版本修复其中提到的链接器错误。