2014-05-13 32 views
0

我想使用字符串數組動態地在我的類中運行時訪問方法。目前這些方法已經存在,最終我想創建它們。 這可能嗎?使用NSString以編程方式訪問或創建一個方法Objective-C

例如:

bool nextLevel=NO; 
for(NSString * match in gameLevels) 
{ 

    if([match isEqualToString:self.level]) 
    { 
     nextLevel=YES; 
    } 
    else if(nextLevel==YES) 
    { 
     self.level=match; 
     nextLevel=NO; 
    } 
} 
//access method named self.level 

預先感謝您!

+2

你的問題不明確,請詳細說明更多 –

+0

@KhawarAli我認爲他想擁有它,所以他可以做'[自@「methodThatDoesSomething」]'在字符串來自可能functuon名在數組 –

+2

你說NSString包含要調用的方法的名稱?是的,這是可能的。看看NSSelectorFromString – Gruntcakes

回答

1

我用:

NSSelectorFromString(selectorString) 

在你的情況下,selectorString是:

NSString * selectorString = @"setLevel:"; 

這是 'setLevel' 而不是 '水平',因爲Objective-C的運行時將自動擴展點發生分配時這些選擇器名稱的屬性。

+1

你的意思是'setLevel:'? –

+0

爲什麼我是這樣做的。接得好。冒號是必要的,因爲我們傳遞了一個參數。 – atreat

0

要訪問基於字符串的方法,請檢查其他答案。

要在運行時添加方法,您需要創建一個IMP函數或塊。

如果使用的功能,可能是這樣的:

void myMethodIMP(id self, SEL _cmd) 
{ 
    // implementation .... 
} 

你也可以使用這樣的塊:

IMP blockImplementation=imp_implementationWithBlock(^(id _self, ...){ 
    //Your Code here 
} 

然後你需要添加方法,如下所示:

class_addMethod(yourClass, @selector(selectorName), (IMP) blockImplementation, encoding); 

編碼部分是一種特殊的運行時編碼,用於描述您的方法的參數類型才能享有。您可以在Objective-C運行時參考中找到它。

如果您在生成的方法中接收到動態參數,則需要使用va_list讀取值。

相關問題