這裏是新手問題。我希望能夠通過數據(即XML文件)指定要發送的適當的Objective-C消息。任何意見,如果這是可能的或我可以做到這一點?如何命名一個obj-c函數來調用xml數據
下一個最好的事情,如果我不能做到這一點,將創建一個地圖對象,將關鍵(int
)與函數(我猜也是選擇器)相關聯。如果以上不是,那麼這可能嗎?
如果有人能指點我一些教程或示例代碼作爲參考,那會很棒。現在我正在做一個大轉換語句,我不喜歡它。 (我打開id,並在每種情況下,明確調用與特定id相關的方法。)
這裏是新手問題。我希望能夠通過數據(即XML文件)指定要發送的適當的Objective-C消息。任何意見,如果這是可能的或我可以做到這一點?如何命名一個obj-c函數來調用xml數據
下一個最好的事情,如果我不能做到這一點,將創建一個地圖對象,將關鍵(int
)與函數(我猜也是選擇器)相關聯。如果以上不是,那麼這可能嗎?
如果有人能指點我一些教程或示例代碼作爲參考,那會很棒。現在我正在做一個大轉換語句,我不喜歡它。 (我打開id,並在每種情況下,明確調用與特定id相關的方法。)
我愛你問這個問題;經常,我看到撒旦的腫脹開關聲明。很高興看到有人想使用函數表來代替。
如果您可以使用屬性列表文件(通常使用XML編碼),這非常簡單。
只需製作一個屬性列表,其中的根元素是一個字典,從某些鍵映射到某些選擇器。
Key Type Value
----------------------------------------------
Root Dictionary
firstKey String someSelector
secondKey String anotherSelector
裝入屬性列表中的內容爲NSDictionary
:
id path = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"plist"];
id dict = [NSDictionary dictionaryWithContentsOfFile:path];
SEL selector = NSSelectorFromString([dict objectForKey:@"firstKey"]);
if ([someObject respondsToSelector:selector]) {
[someObject performSelector:selector];
}
當然,你會想這個邏輯重構爲一個適當的方法,而且很可能緩存屬性列表作爲一個實例變量。
注意:我個人認爲最好把這個函數表放在一邊;屬性列表很酷,但我不確定它在這種情況下非常有用。另外,如果你對使用Objective-C++很酷,std::map
將允許你擺脫不包裝和解開NSString
對象等選擇器。
objective-C++ ??? :) – willcodejavaforfood 2010-12-09 08:46:23
嚴重的是,我希望我可以upvote你兩次。一個連貫的問題和一個問題,更多的初學者應該問。乾杯。 – 2010-12-09 07:20:15