2011-12-31 31 views
0

所以,我編譯的會是什麼,而功能我試圖運行參數一個NSString ...我會盡力闡述。我使用的代碼:Objective-C的運行,而語句的NSString

NSMutableString *str = [[NSMutableString alloc] init]; 
for (int i = 0; i < [self.badCoords count]; i++) { 
    CGFloat off = [[self.badCoords objectAtIndex:i] floatValue]; 
    [str appendFormat:@"(y > %.0f || y < %.0f) && ", off+21, off-21]; 
} 
str = [str substringToIndex:[str length]-4]; 

給我的(y > 102 || y < 60) && (y > 134 || y < 92) && (y > 116 || y < 74)或類似的東西輸出字符串。

然後我需要這個字符串放到一個while語句,與此類似:

while((y > 102 || y < 60) && (y > 134 || y < 92) && (y > 116 || y < 74)) { 
    y = [self somethingNew]; 
} 
+0

你可以給一點更多的上下文嗎?你爲什麼想這樣做? – 2011-12-31 21:59:28

+0

那麼我有應用程序隨機創建UI元素Y的起源,並需要讓他們不要重疊。 – 2011-12-31 22:00:22

回答

3

你所實際詢問是「?我怎麼動態生成的代碼,編譯它,然後執行它」

答案是; 「你不」。至少,你沒有超出特定的情況,如果你這樣做,你不這樣做,並期待任何合理的表現。

在這種情況下,它看起來像你有你需要測試的任何值的數字表示。最好把數字留下來!打印到一個字符串,然後試圖解析/編譯回來是一個冰河時代的緩慢模式(見2000年以前的TCL)。

I.e.你會計算你的各種限制,然後直接使用while()語句。

while((y > upperLimit) || (y < lowerLimit) ... etc ...) {...} 
1

像這樣的東西應該做你問什麼:

float y = initialYValue; 
BOOL yInBadRanges = NO; 
while (!yInBadRanges) { 
    for (NSNumber *coordinate in self.badCoords) { 
     CGFloat upperLimit = [coordinate floatValue]+21.0f; 
     CGFloat lowerLimit = [coordinate floatValue]-21.0f; 
     if (y <= upperLimit && y >= lowerLimit) { 
      yInBadRanges = YES 
      break; 
     } 
    } 
    if (!yInBadRanges) y = [self somethingNew]; 
} 

請注意,您最初詢問去了解它的方式是不是我做的方式。將條件轉換爲格式化的字符串沒有任何意義,因爲您無法以這種方式在while循環中將該字符串用作條件表達式。

你的評論只是澄清你的意圖,但沒有更多細節,很難提出具體的行動方案。我的建議是認真想想該怎麼做你要完成,而不在一開始做的一種特殊的方式被設置的東西。有可能是佈局控件更好的算法...

(標準免責聲明適用:我輸入到這個答案編輯器,不運行它...)

+0

@bbum當然是對的。我發佈的代碼與他建議的類似。 – 2011-12-31 22:11:13

0

你可以做一些邏輯測試(在規定運行時)使用NSPredicate類功能​​。 有它一看,它可能是你所需要的。