Iphone 如何清除缓存的UITableViewCells
所以,我一直在为我的iOS应用程序实施自动化测试,我遇到了一个奇怪的问题 在我使用的测试框架(Frank)中,它尝试触摸基于可访问性标签的视图/按钮/所有内容。这非常有效,除了Iphone 如何清除缓存的UITableViewCells,iphone,ios,uitableview,Iphone,Ios,Uitableview,所以,我一直在为我的iOS应用程序实施自动化测试,我遇到了一个奇怪的问题 在我使用的测试框架(Frank)中,它尝试触摸基于可访问性标签的视图/按钮/所有内容。这非常有效,除了UITableViews之外,因为它们是如何缓存和重用UITableViewCells的。如果我从表中“删除”一个单元格,表缓存系统会将该单元格翻转为隐藏。但它仍然会在那里等待重用,我的框架仍然可以看到它,这导致了一些问题 因此,问题:如何强制UITableView释放所有已删除/缓存的单元格,使它们不再是视图层次结构的一
UITableViews
之外,因为它们是如何缓存和重用UITableViewCells
的。如果我从表中“删除”一个单元格,表缓存系统会将该单元格翻转为隐藏。但它仍然会在那里等待重用,我的框架仍然可以看到它,这导致了一些问题
因此,问题:如何强制UITableView释放所有已删除/缓存的单元格,使它们不再是视图层次结构的一部分?此技巧可能会有所帮助:
while([tableView dequeueReusableCellWithIdentifier:cellId]!=nil);
当然,它需要为每个可能的cellId
注意,缓存的单元格不是视图层次结构的一部分 还有一个选择。如果
UITableViewController
当前不可见,则调用didReceiveMemoryWarning
方法将释放其所有UITableViewCell
s。此技巧可能有助于:
while([tableView dequeueReusableCellWithIdentifier:cellId]!=nil);
当然,它需要为每个可能的cellId
注意,缓存的单元格不是视图层次结构的一部分 还有一个选择。如果
UITableViewController
当前不可见,则调用didReceiveMemoryWarning
方法将释放其所有UITableViewCell
s。在方法-(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];
}
在方法-(UITableViewCell*)tableView:(UITableView*)tableView cellforrowatinexpath:(nsindepath*)indepath
中,使用以下命令:
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]`
然后检查你的手机是否为零。如果是,请分配单元格的新实例
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
[cell setDelegate:self];
}
即使你能做到这一点,你难道不会测试在实际使用中不会发生的事情吗?找到一种方法让测试系统知道它是一个被删除的单元,这似乎不是更好吗?我很想知道,但是测试系统是一个预编译的库,所以我不能让它像真正的用户那样忽略隐藏的对象。那么,在测试本身中,相对于系统来说,如何呢?你能检查一个隐藏的属性吗?不直接熟悉Frank测试系统……即使你们可以做到这一点,你们不会测试在实际使用中不会发生的事情吗?找到一种方法让测试系统知道它是一个被删除的单元,这似乎不是更好吗?我很想知道,但是测试系统是一个预编译的库,所以我不能让它像真正的用户那样忽略隐藏的对象。那么,在测试本身中,相对于系统来说,如何呢?你能检查一个隐藏的属性吗?不直接熟悉弗兰克测试系统。。。