[英]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.