2011-11-22 127 views
1

我正在開發中,我已宣佈伊娃作爲NSIndexPath對象一個應用程序,但它表明在didSelectRowAtIndexPath方法NSArray的對象。它是如何表現的,我身邊發生了什麼錯誤。 請幫幫我。 在此先感謝。NSIndexPath對象顯示爲NSArray對象?

示例代碼:

//.h file: 
NSIndexPath *lastIndexPath; 

//.m file: 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

     if([[default1 objectForKey:@"keyToRepeatString"] isEqualToString:[arrayRepeat objectAtIndex:i]]) 
     { 
      lastIndexPath=indexPath; 
      repeatString=[default1 objectForKey:@"keyToRepeatString"]; 
     } 
} 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
int newRow = [indexPath row]; 
    int oldRow = [lastIndexPath row]; 
} 

    int oldRow = [lastIndexPath row];........//Here lastIndexPath shows as NSArray obj? 
+2

NSIndex或NSIndexPath? – Ilanchezhian

+1

可以ü請張貼一些示例代碼 – maheswaran

+0

可能是,你忘了保留你的伊娃嗎? –

回答

1

看起來像一個內存管理問題:

lastIndexPath=indexPath 

該行並沒有告訴indexPath流連:)

你將需要把這個代替:

[lastIndexPath autorelease]; 
lastIndexPath = [indexPath retain]; 

首先它告訴任何以前的lastIndexPath你完成它。然後它告訴indexPath不被處理,所以內存不會被用於其他任何東西(在你的情況下,一個NSArray)。

+0

TanQ Verymuch ....它的工作great..TanQ ... TanQ –

0

您如何聲明指針已經很少做什麼對象類型的指針地址。 Objective-C是非常鬆散的類型,你可以將一個UIViewController地址分配給一個NSString指針,只要你對該賦值進行了模糊處理,以便編譯器中非常弱的類型檢查不會發生抱怨。

所以,你可以指定一個NSArray地址到NSIndexPath指針,會發生什麼,直到你嘗試使用的價值。

而且,亞歷山大·建議,如果你不能保持的東西,應予以保留,對象「後面」的地址可能被釋放,然後重新分配完全不同的東西。 (這個問題尤其依賴於時序/場景,可能會導致代碼在仿真器上工作,但在硬件上失敗。)

昨天我有一個非常類似的問題(某些舊代碼中的錯誤由某人編寫否則神祕地開始失敗)。我最終不得不NSLog指針的descriptionretainCount在多個位置通過代碼來檢測在什麼情況下它正在發生變化以及爲什麼。 (問題是屬性在另一類不當聲明assign