所以,我一直在为我的iOS应用程序实现自动化测试,我遇到了一个奇怪的问题。
使用我正在使用的测试框架(Frank),它尝试根据辅助功能标签触摸视图/按钮/所有内容。除了UITableViews
之外,这很有效,因为它们如何缓存和重用UITableViewCells
。如果我从表中“删除”一个单元格,表格缓存系统会将单元格翻转为隐藏。但它仍然会在那里等待重用,我的框架仍然可以看到它,这会导致问题。
所以,问题:如何强制UITableView释放所有已删除/缓存的单元格,使它们不再是View层次结构的一部分?
答案 0 :(得分:3)
这个技巧可能会有所帮助:
while([tableView dequeueReusableCellWithIdentifier:cellId]!=nil);
当然,它需要为每个可能的cellId
手动重复它
请注意,缓存的单元格不是视图层次结构的一部分。
还有一个选择。如果当前未显示UITableViewController
,则didReceiveMemoryWarning
方法的调用将释放其所有UITableViewCell
。
答案 1 :(得分:0)
在方法- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
中,使用:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]`
然后检查你的细胞是否为零。如果是,则分配一个新的单元实例。
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
[cell setDelegate:self];
}