巨大な質問に先延ばしにしないでください...(そのほとんどはコードです)。
OK、tableView を含むビュー コントローラー (AddClaim と呼ばれる) を含むナビゲーション コントローラーがあります。セルが選択されている場合、これが呼び出されます。
EditClaimDetails *detailViewController = [[[EditClaimDetails alloc] init] autorelease];
// Pass the selected object to the new view controller.
detailViewController.selectedIndexPath = indexPath;
detailViewController.newClaimArrayDetails2 = newClaimArrayDetails;
[self.navigationController pushViewController:detailViewController animated:YES ];
これはうまく機能し、tableView を含む新しいビュー コントローラーが表示されます (これは排他的なリストです)。
EditClaimDetails の ViewDidLoad には、次のコードが存在します: (claimTypeHoldingArray は、ヘッダー ファイルで宣言された可変配列です)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(pressedBack)];
self.navigationItem.leftBarButtonItem = backButton;
claimTypeHoldingArray = [[NSMutableArray alloc] initWithArray:newClaimArrayDetails2];
基本的に、これの結果は期待どおりです。[戻る] ボタンが表示されます (押すと、ビュー コントローラーを AddClaim にポップするセレクターが呼び出されます)。 claimTypeHoldingArray には、AddClaim で指定された newClaimsArray が含まれています。
これは didSelectRowAtIndexPath のコードの一部です: (claimTypeArray はセルの textLabels を保持する配列です)
[claimTypeHoldingArray replaceObjectAtIndex:0 withObject:[claimTypeArray objectAtIndex:indexPath.row]];
これにより、claimTypeHoldingArray の最初のオブジェクトが、セルの TextLabel にあったテキストに置き換えられます。ここまでは順調ですね。(nslog でテスト済み)
これは、戻るボタンが押されたときのコードです。
-(IBAction)pressedBack {
AddClaim *sender = [[[AddClaim alloc] init] autorelease];
sender.newClaimArrayDetails = claimTypeHoldingArray;
[self.navigationController popViewControllerAnimated:YES];
ここから問題が始まります... このアクション (私によると) は、newClaimArrayDetails を claimTypeHoldingArray に置き換える必要があります。(そうします)しかし、View Controllerがポップされ、画面が戻ってクレームを追加しても、この配列は変更されません!私は何を間違えましたか?! ところで、すべてのプロパティが設定されています。これは私がviewDidAppearで行うテストです:
NSLog(@"%@",[newClaimArrayDetails objectAtIndex:0]);