2010-04-26 93 views
1

我們正在將一個庫整合到一個iPhone應用程序中,該應用程序似乎在內部使用iPhone的Google工具箱。 谷歌工具箱添加到NSString的方法gtm_stringBySanitizingAndEscapingForXML。 問題是,當我們試圖對這個庫的調用,我們得到應用於NSString的類別是否也通過「免費橋接」應用於NSCFString?

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

所以它出現在庫調用一個NSCFString該方法,以該類別不適用。 那麼......這種情況是不是跨免費橋接應用於CoreFoundation類? 如果是這樣的話,我們至少知道它爲什麼會炸燬。弄清楚如何解決這個問題是另一回事。

回答

2

應用於NSString的類別也適用於NSCFString,因爲NSCFString是NSMutableString的一個子類,它是NSString的子類。

但您是否真的包含Google Toolbox庫(GTMNSString+XML.m)?

+0

谷歌工具箱內置到庫中,所以如果我們包含它,我們會因爲重新定義類而得到錯誤。 我的同事實際上已經解決了問題,有一個鏈接器標誌導致它中斷。 感謝您的回答。 – tobyc 2010-04-29 01:57:33

2

NSCFString類不是NSMutableString的子類......它只是另一個類的NSString集羣。所以,如果你有一個NSCFString富VAR和你測試:

BOOL isNSString = [foo isKindObClass:[NSString class]]; 

你會得到isNSStringNO

我遇到了一些問題,因爲我已經創建了一個NSString類,我不知道如何應用新的方法,當類是NSCFString或從集羣中的任何其它類...


編輯: 好吧,我找到了解決方案。雖然這些測試返回NO

[myString isKindOfClass:[NSString class]]; 
[myString respondsToSelector:@selector(myNSStringCategorySelector:)]; 

我強迫的方法的執行爲NSCFString類,它工作正常!

我希望它能幫助別人!

+0

強制執行如何?使用performSelector? – chris838 2012-09-17 19:44:24

0

聽起來像這個類別的實現沒有鏈接到你的程序。假設您的庫被編譯爲一個靜態庫,您可能需要將-ObjC鏈接器標誌添加到您的項目中。欲瞭解更多信息,請看this technote。那裏提到的鏈接器錯誤應該用最新的Xcode版本修復。

相關問題