0

每次进入 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);

}

当我将此代码放在按钮中时,它可以工作

谢谢您的帮助

4

2 回答 2

3

viewDidLoad在视图加载时调用一次。

viewWillAppear每次进入该视图时都会调用。

如果您想在每次出现视图时执行某些操作,请将代码放入viewWillAppear.

编辑:您的数组可能正在被释放。尝试设置断点dealloc作为一种简单的方法来查看是否是这种情况:

- (void)dealloc {
    NSLog(@"BYE!); // <-- put your breakpoint here
}

如果是,您必须 (a) 将数据存储在其他地方,或 (b) 防止此视图/控制器被释放。

还有,你是谁tableViewDelegate?这将不得不实现返回表格视图中项目数的方法等等。我建议阅读文档以理清所有这些关系。

于 2013-11-11T21:33:28.740 回答
2

您不希望将该数组作为视图控制器的属性/ivar。视图控制器可能并且将会在不使用时被释放(例如,如果它在导航控制器内,并且您点击“后退”按钮以转到上一个屏幕。)当视图控制器被释放时,您的数组显然会停止存在。

我建议创建将该数组保存在一个单独的位置,例如在单例数据对象中,或者甚至(作为一种快速的短期解决方案)您的应用程序委托。


关于您发布的代码:请记住,[UIViewController viewDidLoad]在视图控制器的生命周期中只调用一次。它可能会被多次调用,但这意味着原始实例已被释放(并且您的原始数组已消失)。

于 2013-11-11T21:43:51.450 回答