每次进入TableView时,如何在数组中添加对象 我将此代码放在viewDidLoad和viewDidAppear方法中,但它似乎不起作用 :
- (void)viewDidLoad
{
[super viewDidLoad];
if (!myArray) {
myArray = [[NSMutableArray alloc] init];
}
[peopleListe insertObject:[NSDate date] atIndex:0];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:0 inSection:0];
[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];
NSLog(@"%@",myArray);
}
当我将此代码放在一个按钮中时,它可以正常工作
感谢您的帮助
答案 0 :(得分:3)
viewDidLoad
被调用一次。
viewWillAppear
。
如果您想在每次显示视图时执行某些操作,请将代码放在viewWillAppear
。
dealloc
中设置一个断点,作为查看是否是这种情况的简单方法:
- (void)dealloc {
NSLog(@"BYE!); // <-- put your breakpoint here
}
如果是,您必须(a)将您的数据存储在其他地方,或者(b)防止此视图/控制器被解除分配。
另外,谁是你的tableViewDelegate
?这将必须实现返回表视图中的项目数的方法,依此类推。我建议您仔细阅读文档,以便解决所有这些关系。
答案 1 :(得分:2)
您不希望将该数组作为视图控制器的属性/ ivar。视图控制器可以并且将在未使用时被释放(例如,如果它在导航控制器内部,并且您点击“后退”按钮以转到上一个屏幕。)当视图控制器被取消分配时,您的阵列显然会停止存在。
我建议将该数组保存在一个单独的位置,例如在单个数据对象中,甚至(作为快速短期解决方案)您的应用程序委托。
关于您发布的代码:请记住,[UIViewController viewDidLoad]
仅在视图控制器的生命周期中调用一次。它可能不止一次被调用,但这意味着原始实例已被dealloc'd(并且你的原始数组已经消失)。