不要被这个大问题推迟......(主要是代码) 好的,我有一个导航控制器,它包含一个包含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是保存单元格的textLabel的数组)
[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];
这就是麻烦开始的地方...... 这个动作(据我所知)应该用claimTypeHoldingArray替换newClaimArrayDetails。 (确实如此)但是当弹出视图控制器并且屏幕移回添加声明时,此数组不会更改! 我做错了什么?!顺便说一句,所有属性都设置好了。 这是我在viewDidAppear中做的测试:
NSLog(@"%@",[newClaimArrayDetails objectAtIndex:0]);
答案 0 :(得分:1)
这个答案与问题的规模相同,希望它不是太大;)
因此,在您的pressedBack按钮方法中,您尝试使用claimTypeHoldingArray更新初始的AddClaim视图控制器对象。
你正好一半 - 你肯定是在更新AddClaim对象,而不是导航控制器内的对象。你正在创建一个新的并更新它!
-(IBAction)pressedBack {
// This line creates a new AddClaim view controller
AddClaim *sender = [[[AddClaim alloc] init] autorelease];
// This line updates your _new_ AddClaim view controller
sender.newClaimArrayDetails = claimTypeHoldingArray;
// This line displays the _old_ AddClaim object
[self.navigationController popViewControllerAnimated:YES];
您需要将创建它的AddClaim视图控制器传递给EditClaimDetails视图控制器。
在您的单元格中选择方法添加类似
的内容detailViewController.addClaimViewController = self;
(其中addClaimViewCOntroller是EditClaimDetails对象的属性,如
@property (nonatomic, retain) Addclaim *addClaimViewController;
然后,您的pressedBack方法变为
-(IBAction)pressedBack {
// This line updates your _old_ AddClaim view controller
addClaimViewController.newClaimArrayDetails = claimTypeHoldingArray;
// This line displays the _old_ AddClaim object
[self.navigationController popViewControllerAnimated:YES];
希望有所帮助。
答案 1 :(得分:0)
检查AddClaim中的数组属性定义,是否有机会(非原子,复制)?如果是,它将保存您的数组的私有副本,以便原始数组无法更改。