1

UINavigationControllerを使用してUIViewControllerをスタックにプッシュします。次に、ユーザーがテーブルビューで行を選択すると、新しいバージョンのビューコントローラが割り当てられ、プッシュします私は情報を格納するために使用しているNSMutableArrayは、スタックからポップされたビューコントローラから値を保持しているようだ。ここでUINavigationControllerスタックの同じビューコントローラの2つのコピーを持つ

がスタックに新しいを推進している方法です。

- (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

+0

そして、どのように変更可能な配列が定義されていますか?プロパティではなくクラス変数の場合は、それが問題になる可能性があります。 – picciano

答えて

0

変更可能な配列が[レスポンスobjectAtIndex:indexPath.row]であると仮定すると、新しいプッシュされたビューコントローラに渡す唯一の値なので、それを変更する場合、同じオブジェクトであるアカウントを取らなければならず、変更が共有されます。あなたが書くことができ

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

を私が言ったように、私は、オブジェクトがあなたの問題の可変配列であることを前提としています。

もう1つスマートな解決策は、変更可能な配列を '保持'ではなく 'コピー'として保存するために使用するプロパティを定義することです。

+1

私の問題ではありませんが、私はいくつかのことを教えてくれましたが、応答に感謝します。私の問題はNSNotificationCenterだったことが判明しました。データが上書きされるように、次のビューに進むときにオブザーバを削除していませんでした。 – dbslone

関連する問題