2010-12-09 67 views
1

這裏是新手問題。我希望能夠通過數據(即XML文件)指定要發送的適當的Objective-C消息。任何意見,如果這是可能的或我可以做到這一點?如何命名一個obj-c函數來調用xml數據

下一個最好的事情,如果我不能做到這一點,將創建一個地圖對象,將關鍵(int)與函數(我猜也是選擇器)相關聯。如果以上不是,那麼這可能嗎?

如果有人能指點我一些教程或示例代碼作爲參考,那會很棒。現在我正在做一個大轉換語句,我不喜歡它。 (我打開id,並在每種情況下,明確調用與特定id相關的方法。)

+0

嚴重的是,我希望我可以upvote你兩次。一個連貫的問題和一個問題,更多的初學者應該問。乾杯。 – 2010-12-09 07:20:15

回答

1

我愛你問這個問題;經常,我看到撒旦的腫脹開關聲明。很高興看到有人想使用函數表來代替。

如果您可以使用屬性列表文件(通常使用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對象等選擇器。

+0

objective-C++ ??? :) – willcodejavaforfood 2010-12-09 08:46:23

相關問題