1

我正在使用UINavigationController將UIViewController推入堆棧,然後當用戶在表視圖中選擇一行時,我分配一個新版本的視圖控制器並推送它到堆棧這工作正常,但後來當我開始按下後退按鈕我用來存儲信息的NSMutableArray似乎保持從視圖控制器剛剛從堆棧中移出的值。UINavigationController與堆棧上的相同視圖控制器的兩個副本

這裏是推新入堆棧方法:我敢肯定有一些愚蠢的我失蹤

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    [tableView deselectRowAtIndexPath:indexPath animated:YES]; 

    if (indexPath.section == 1) { 
     if (hasLoadedResponses && [responses count] == 0) { 
      return; 
     } 

     VideoDetailViewController_iPhone *nextView = [[VideoDetailViewController_iPhone alloc] initWithNibName:@"VideoDetailViewController_iPhone" bundle:nil withVideoArray:[responses objectAtIndex:indexPath.row]]; 
     nextView.navController = navController; 
     [navController pushViewController:nextView animated:YES]; 
     [nextView release]; 
    } 

} 

,但似乎無法馬上找到它。

+1

'VideoDetailViewController_iPhone'如何與'NSMutableArray'交互?這可能是你的問題所在。 – yuji 2012-02-22 19:46:42

+0

而且,定義可變數組的方式和位置在哪裏?如果它是一個類變量而不是屬性,那可能是問題。 – picciano 2012-02-22 20:36:39

回答

0

假設可變數組是[responses objectAtIndex:indexPath.row],因爲是您傳遞給新推視圖控制器的唯一值,那麼如果您正在修改它,則必須考慮到這是相同的對象,並且所以修改是共享的。

你可以寫:

. withVideoArray:[NSMutableArray arrayWithArray:[responses objectAtIndex:indexPath.row]]; 

正如我所說的,我認爲對象是你的問題的可變數組。

另一個更聰明的解決方案是定義您用來將可變數組存儲爲'複製'而不是'保留'的屬性。

+1

感謝您的迴應,雖然這不是我的問題,但它教會了我幾件事。事實證明,我的問題是NSNotificationCenter,我在去下一個視圖時沒有移除觀察者,因此數據被覆蓋。 – dbslone 2012-02-23 14:57:43

相關問題