Objective c 目标C:将新的viewController推送到navigationController后,可变数组将刷新

Objective c 目标C:将新的viewController推送到navigationController后,可变数组将刷新,objective-c,uinavigationcontroller,nsmutablearray,Objective C,Uinavigationcontroller,Nsmutablearray,我在做什么: 我正在实现一个带有两个视图控制器的导航控制器,一个根控制器(在启动时显示)和一个表视图控制器。我正在table View控制器中创建NSMutableArray,以存储从通讯簿中选择的联系人列表 问题: 当我从表视图控制器单击返回根视图控制器时,我的NSMutable数组将被刷新,因此当我再次单击以显示表视图时,不会显示任何内容。防止这种情况发生的最佳方法是什么?我在我的表视图控制器中实例化了NSMutable数组 if (!personArray) { s

我在做什么: 我正在实现一个带有两个视图控制器的导航控制器,一个根控制器(在启动时显示)和一个表视图控制器。我正在table View控制器中创建NSMutableArray,以存储从通讯簿中选择的联系人列表

问题: 当我从表视图控制器单击返回根视图控制器时,我的NSMutable数组将被刷新,因此当我再次单击以显示表视图时,不会显示任何内容。防止这种情况发生的最佳方法是什么?我在我的表视图控制器中实例化了NSMutable数组

if (!personArray)
    {
        self.personArray = [[NSMutableArray alloc] init];
    }
任何建议都将不胜感激

谢谢


Zhen

返回时将取消分配您的tableview,然后再次前进时将重新创建它。因此,不可能将其保留在tableview中。相反,您应该创建一个在此过程中不会被销毁的新类。可能您可以将数组存储在应用程序委托中,但最好创建一个专门用于缓存数据的新类。

一种方法是将person数组作为根视图控制器或应用程序委托的属性,以便创建它(可能从文件读取)当应用程序启动并继续运行,直到应用程序终止

另一种方法是保持原样,但防止在用户返回根视图控制器时释放表视图控制器。您的根视图控制器代码可能类似于:

-(IBAction)showMeTheTable:(id)sender
{
    MyTableViewController *mtvc = [[MyTableViewController alloc] initWithNibName:nil bundle:nil];
    [self.navigationController pushViewController:mtvc animated:YES];
    [mtvc release];
}
您可以对此进行更改,以便在根视图控制器的生命周期早期创建并保留表视图控制器,然后始终推送相同的表视图控制器,而不是每次创建一个新的表视图控制器:

-(IBAction)showMeTheTable:(id)sender
{
    [self.navigationController pushViewController:self.tableViewController animated:YES];
}