2014-06-26 114 views
1

我創建了一個foreach循環如下Foreach循環有2個變量

for (int i = 0; i < 30; i++) { 

     NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; 

     NSCalendar *c = [NSCalendar currentCalendar]; 
     NSDate *nowDate = [NSDate date]; 
     NSDate *treeDate = [defaults objectForKey:@"tree_1"]; 
     NSDateComponents *components = [c components:NSHourCalendarUnit fromDate:treeDate toDate:nowDate options:0]; 
     NSInteger treeInt = components.hour; 

     if(treeInt >= 0){ 
      [_tree1 setSpriteFrame:[CCSpriteFrame frameWithImageNamed:@"TreeStump.png"]]; 
     } 
    } 

我想實現是有tree_1_tree1增量與循環。我不知道如何將i添加到2個位置的變量中。所以@""setSpriteFrame方法

例如,i == 3字符串@"tree_4"和可變_tree4內。

+0

你的意思是說,例如,當'i == 3'字符串'@「tree_4」'和變量'_tree4'將被使用? – trojanfoe

+0

@trojanfoe thats correct – Allreadyhome

+1

從'i'(其中X = i + 1)創建'@「tree_X」'很容易(參見'[NSString stringWithFormat:]'),但訪問'_treeX'會更困難,您將擁有使他們的財產和使用KVC我估計。 – trojanfoe

回答

0

我認爲您需要以下內容,因爲您在這裏使用的是cocos2d,您可以輕鬆訪問您擁有的任何父級中添加的精靈。

[NSString stringWithFormat:@"tree_%i", i + 1]; 

if(treeInt >= 0){ 
    CCSprite *sprite = (CCSprite*)[self getChildByTag:i+1]; 
    [sprite setSpriteFrame:[CCSpriteFrame frameWithImageNamed:@"TreeStump.png"]]; 
} 

只需要爲您的精靈設置標籤,同時創建相同的序列。

0

第一部分是簡單的:

[NSString stringWithFormat:@"tree_%i", i + 1]; 

%i部分是一種speciffier,它告訴基本算法,它應該期望和int參數。你可以這樣使用:

NSDate *treeDate = [defaults objectForKey:[NSString stringWithFormat:@"tree_%i", i + 1]]; 

第二部分有點棘手,因爲你將不得不修改你的代碼。如果你想循環遍歷一些變量,最簡單的方法就是把它們放在一個數組中,並使用循環計數器來訪問它中的項目。
由於你的循環有30次迭代,所以從一開始就將_treeX變量存儲在一個數組或其他容器中似乎是個好主意,因爲它沒有30個變量。將東西放入數組/容器中可以動態更改項目數,而無需更改大量代碼。

0

對於第一部分是簡單的,你可以使用字符串格式:

[NSString stringWithFormat:@"tree_%i", i + 1]; 

對於第二,您可以使用目標C運行時功能,以名稱來訪問實例變量。

Ivar class_getInstanceVariable(Class cls, const char * name)