目标C:在将新的viewController推送到navigationController之后,可以刷新Mutable Array

时间:2011-04-20 04:15:17

标签: objective-c uinavigationcontroller nsmutablearray

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

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

中实例化了我的NSMutable Array
if (!personArray)
    {
        self.personArray = [[NSMutableArray alloc] init];
    }

非常感谢任何建议!

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

实现此目的的一种方法是将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];
}