我们试图更新一个TableView,它使用一个NSMutableArray作为数据源。 我们得到了3视图控制器:周>周刊“日如何修改属于源视图控制器的NSMutableArray元素?
应用流程很简单:
- 周列表
- 周细节,与天的名单
- 日详细
(2)Week ViewController.h,我们声明daysArray
// file: WeekViewController.h
@interface WeekViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *firstDayLabel;
@property (strong, nonatomic) NSMutableArray *daysArray;
@property (strong, nonatomic) IBOutlet UITableView *daysTableView;
@end
在(3)日的ViewController,我们使用viewWillDisappear方法,该方法更新属于源视图控制器
- (void)viewWillDisappear:(BOOL)animated
{
// currentVCIndex is the index of the parent view controller: WeekViewController
int currentVCIndex = [self.navigationController.viewControllers indexOfObject:self.navigationController.topViewController];
// parent is the reference to the parent view controller: WeekViewController
WeekViewController *parent = (WeekViewController *)[self.navigationController.viewControllers objectAtIndex:currentVCIndex];
// indexPath is a reference to the Cell (in a TableView) that made the Segue to DayViewController
NSIndexPath *indexPath = [parent.daysTableView indexPathForSelectedRow];
// ### UPDATES simple UILabel on WeekViewController ###
parent.firstDayLabel.text = @"new text'";
// ### UPDATES the DAY OBJECT in an array on WeekViewController ###
[parent.daysArray replaceObjectAtIndex:indexPath.row withObject:self.dayDetail];
[parent.daysTableView reloadData];
}
这daysArray日最后一个抛出错误:终止应用程序,由于未捕获的异常'NSInternalInconsistencyException'
reason:
'-[__NSCFArray replaceObjectAtIndex:withObject:]: mutating method sent to immutable object
但是,如果我们仅仅包括
parent.firstDayLabel.text = @"new text'";
上WeekController的标签正确修改。
因此,我们不知道为什么我们不能替换该NSMutableArray对象的索引处的对象。
我们尝试过使用辅助对象和mutableCopy,并再次失败。
UPDATE
感谢@sapi,
我们在代码前面的部分解决了这个,用这个
self.daysArray = [NSMutableArray arrayWithArray:responseObject];
显然'daysArray'是不是一个可变数组。指针类型不确定对象类型。 – 2014-10-08 00:34:27