应用于NSString的类别是否也适用于通过“免费电话桥”的NSCFString?

时间:2010-04-26 04:26:27

标签: iphone objective-c categories google-toolbox-for-mac

我们正在将图书馆集成到iPhone应用程序中,该应用程序似乎在内部使用谷歌的谷歌工具箱。 谷歌工具箱为NSString添加了一个方法gtm_stringBySanitizingAndEscapingForXML。 问题是,每当我们尝试调用这个库时,我们都会得到

[NSCFString gtm_stringBySanitizingAndEscapingForXML]: unrecognized selector sent to instance 0x272478

因此,看起来该库正在NSCFString上调用该方法,该类别不适用于该方法。 那么......是不是这个类别不适用于CoreFoundation类的免费电话桥? 如果是这样,那么我们至少知道为什么它会爆炸。弄清楚如何解决它是另一回事。

3 个答案:

答案 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版本修复其中提到的链接器错误。