2013-06-19 35 views
0

我現在面臨的問題與轉換的NSString成目標C.轉換成NSString的可執行語句

例如可執行語句,

NSString *strColorAssembly = @"[UIColor redColor]"; 

現在,我需要把這個字符串轉換成可執行代碼和傳遞給.color屬性。 這只是一個例子,我試圖建立一個項目,其中一切都是動態的,所以如果任何人都可以爲我提供正確的方向,那將是非常有幫助的。

回答

0

你不能在iOS上這樣做,期間。 iOS阻止您分配既可以寫入也可以執行的內存頁面。

您可以管理的最好方法是解釋字符串,解析它們,並嘗試將它們映射到Objective-C調用(使用NSClassFromStringNSSelectorFromString)。

我會建議不要做你想做的事情,而應該使用可可到動態語言的許多綁定之一。我認爲最流行的將可可綁定到Lua,所以你可以編寫你的Lua代碼,一切都將是動態的。

0

我不確定您是否可以通過編程實現該目標。如果是我,我會實現一個接受NSString(或NSInteger)並返回UIColor的方法。

- (UIColor *)colorDecode:(NSString *)colorPassed 
{ 
if ([colorPassed isEqualToString @"red"]) 
{ 
    return [UIColor redColor]; 
} 
else if 
. 
. 
. 
} 

OR

- (UIColor *)colorDecodewithInt:(NSUInteger)colorIndex 
{ 
switch (colorIndex) 
{ 
    case (0) 
    { 
    return [UIColor redColor]; 
    break; 
    } 
    case (1) 
    . 
    . 
    . 
    . 
    default 
    { 
    return <some default color>; 
    break; 
    } 
} 
} 

編輯: 我想你也可以使用一個NSDictionary是由的UIColor的集合對象以及。底線是,除非您開始使用CGColor播放,您可以開始動態傳遞RGB值,否則您將被限制爲編譯代碼中預定義的一組顏色。

0

這聽起來像你正在尋找的是setValue:ForKey:方法。任何符合NSKeyValueCoding協議的選項都可以使用該選項。但是,這隻適用於key部分(即財產的名稱)。 iOS明確禁止對分佈式代碼進行任何修改。我建議使用key作爲字符串,併爲您的其他數據編寫某種解釋器。

+0

聽起來更像是他正在Objective-C中爲Objective-C編寫解析器和VM。 – Idles