繁体   English   中英

具有NSMutableArray的UITableView

[英]UITableView with NSMutableArray

我正在基于NSMutableArray的值填充UITableView。 该表视图具有搜索结果。 如果用户单击其中一个结果,则将导航到另一屏幕。 如果用户单击“后退”,搜索结果将再次填写。 此时,当重新填充表格视图时,仍然会出现旧值,就像我想要的那样。 但是,由于我在做:

 - (void)viewWillAppear:(BOOL)animated
{
    NSMutableArray *m = [[NSMutableArray alloc] init];
    self.searchResultsArray = m;
    [m release];
}

旧的单元格信息不再可用。 因此,如果用户单击旧单元格之一或滚动UITableView,则应用程序崩溃,因为我正在访问上面重新初始化的可变数组。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSArray *cellArray = [searchResultsArray objectAtIndex:indexPath.row];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    appDelegate.selectedCell = [searchResultsArray objectAtIndex:indexPath.row];
}

关于如何正确执行操作,您有任何建议吗?

谢谢。

在我看来,您没有在正确的方法( viewDidLoad: :)中初始化NSArray。 使用XLData,您不必担心在哪里设置存储,重新加载UITableView或向NSArray(searchResultsArray)添加项目,因为它可以跟踪数据(NSArray)并相应地动态更新UITableView。

您仅应在加载视图时重置数组:

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSMutableArray *m = [[[NSMutableArray alloc] init] mutableCopy];
    self.searchResultsArray = m;
    [m release];
}

更改UITableViewDataSourceDelegate实例中的数据时,应始终调用reloadData:方法。

让我知道这是否有帮助

这是因为您每次在视图重新获得焦点时都会重新初始化数组,因此数组中将包含0个对象,这在选择行并引用viewWillAppear时被擦除的数组中的索引时引起问题叫做。

为什么不在viewDidLoad中初始化'self.searchResultsArray'(记住在设备收到内存警告时使用release撤消此操作)

让我知道你是怎么办的。

请尝试以下代码:

- (void)viewWillAppear:(BOOL)animated
{
    // Your search result array with your old values
    // Now add or appened new data to your old search results.

    [self.searchResultsArray addObject:@"Your Value 1"];
    [self.searchResultsArray addObject:@"Your Value 2"];
    [self.searchResultsArray addObject:@"Your Value 3"];
    [self.tableView reloadData];

  //  if you need to add new values from a array put this code in a loop.   
}

它应该可以帮助您...

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM