2011-03-20 61 views
0

該函數運行良好,但始終返回相同的值,因爲我不知道如何使用objectatindex。而這個:如何在for函數中使用objectAtIndex

NSLog (@"Object at index %d is: %@", i, [appDelegate.animals objectAtIndex: i]); 

返回此:

2011-03-20 14:38:07.365 Tutorial[5063:207] Object at index 0 is: <Animals: 0x6151a20> 
2011-03-20 14:38:07.367 Tutorial[5063:207] Object at index 1 is: <Animals: 0x6151ba0> 
2011-03-20 14:38:07.368 Tutorial[5063:207] Object at index 2 is: <Animals: 0x6151d20> 
2011-03-20 14:38:07.371 Tutorial[5063:207] Object at index 3 is: <Animals: 0x6151e90> 
2011-03-20 14:38:07.374 Tutorial[5063:207] Object at index 4 is: <Animals: 0x6151ff0> 
2011-03-20 14:38:07.375 Tutorial[5063:207] Object at index 5 is: <Animals: 0x6152180> 

這是我的全碼:其實,我的東西,在結合的功能。

int i = 0; 
int count; 

TutorialAppDelegate *appDelegate = (TutorialAppDelegate *)[[UIApplication sharedApplication] delegate]; 
Animals *aAnimal = (Animals *)[appDelegate.animals objectAtIndex:i]; 

count = [appDelegate.animals count]; 


for (i = 0; i < count; i++) 
{ 
    // returns the right value, but always the same because no objectAtIndex 
    NSLog(@"%@",aAnimal.animalName); 


    NSLog (@"Object at index %d is: %@", 
      i, [appDelegate.animals objectAtIndex: i]); 




} 
+0

你是什麼意思「它始終返回相同的值」?每行打印一個不同的對象... – 2011-03-20 13:49:58

+0

你在你的App中有什麼代碼?Delegate – Andrew 2011-03-20 18:44:36

+0

NSLog(@「%@」,aAnimal.animalName);返回總是相同的值,另一個NSLog很好,但實際上不得不打印出第一個nslog輸出的內容,但NSLog總是打印出相同的值。因爲我不使用objectAtIndex。 – Max 2011-03-20 18:52:49

回答

1

你試過:

for (i = 0; i < count; i++) { 
    Animals* nextAnimal = (Animals*)[appDelegate.animals objectAtIndex: i]; 
    NSLog (@"Object at index %d is: %@", 
      i, nextAnimal.animalName); 
} 

的原因,你所看到的東西,如:

1-03-20 14:38:07.365 Tutorial[5063:207] Object at index 0 is: <Animals: 0x6151a20> 
2011-03-20 14:38:07.367 Tutorial[5063:207] Object at index 1 is: <Animals: 0x6151ba0> 
2011-03-20 14:38:07.368 Tutorial[5063:207] Object at index 2 is: <Animals: 0x6151d20> 
2011-03-20 14:38:07.371 Tutorial[5063:207] Object at index 3 is: <Animals: 0x6151e90> 
2011-03-20 14:38:07.374 Tutorial[5063:207] Object at index 4 is: <Animals: 0x6151ff0> 
2011-03-20 14:38:07.375 Tutorial[5063:207] Object at index 5 is: <Animals: 0x6152180> 

...是因爲你記錄整個對象,而不是隻名字。但是您可以看到每次通過查看每個對象的內存地址(看起來像0x615....的部分),確實會返回一個不同的對象。

+0

這段代碼很好用,雖然你忘了關閉你的第二行;) – Max 2011-03-20 21:30:40

0

您的代碼沒有任何問題 - 所以我不確定您要綁定什麼。您將打印出實際指向控制檯的指針,以便您看到數組中每個對象的內存位置。

2011-03-20 14:38:07.365 Tutorial[5063:207] Object at index 0 is: <Animals: 0x6151a20> 
2011-03-20 14:38:07.367 Tutorial[5063:207] Object at index 1 is: <Animals: 0x6151ba0> 

你看到這兩個物體有什麼不同嗎?對象0位於0x615 * a20 *,並且對象1位於0x6151 * ba0 *。你想要的是從該對象打印出有用的,我不能給你任何幫助,因爲我不知道你的自定義對象包含什麼。

這是一個有點不清楚發生了什麼事情在你的代碼,但如果你有一個數組(我假設,因爲你使用objectAtIndex:,你這樣做),這是更好的來遍歷它如下:

for (id object in myArray) { 
    NSLog(@"I am: %@", [object description]); 
} 

該語法是Apple推薦的遍歷NSArray的方式。它在迭代時增加了對數組更改的保護。

+0

謝謝!您的信息非常簡單!你能告訴我什麼要填寫(id對象在myArray)出於某種原因,我不工作,描述是這是我的數組的關鍵或蘋果的標準?感謝名單! – Max 2011-03-20 21:27:07

+0

...你應該把你想要迭代的數組。所以我猜'appDelegate.animals'。 'description'是'NSObject'的一部分,所以希望你的對象會響應它(我認爲它是一個NSObject子類)。 – lxt 2011-03-20 21:31:18

0

如果您希望NSLog描述更具信息性,請在您的課程中重寫-description。例如

-(NSString *)description 
{ 
    NSString *description = [super description]; 
    description = [description stringByAppendingFormat:@" %@ %@", self.name, self.age]; 
    return description; 
} 

然後,當NSLog將調用Animal的描述方法時,您會看到您選擇打印的任何屬性。

相關問題