Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何清除缓存的UITableViewCells_Iphone_Ios_Uitableview - Fatal编程技术网

Iphone 如何清除缓存的UITableViewCells

Iphone 如何清除缓存的UITableViewCells,iphone,ios,uitableview,Iphone,Ios,Uitableview,所以,我一直在为我的iOS应用程序实施自动化测试,我遇到了一个奇怪的问题 在我使用的测试框架(Frank)中,它尝试触摸基于可访问性标签的视图/按钮/所有内容。这非常有效,除了UITableViews之外,因为它们是如何缓存和重用UITableViewCells的。如果我从表中“删除”一个单元格,表缓存系统会将该单元格翻转为隐藏。但它仍然会在那里等待重用,我的框架仍然可以看到它,这导致了一些问题 因此,问题:如何强制UITableView释放所有已删除/缓存的单元格,使它们不再是视图层次结构的一

所以,我一直在为我的iOS应用程序实施自动化测试,我遇到了一个奇怪的问题

在我使用的测试框架(Frank)中,它尝试触摸基于可访问性标签的视图/按钮/所有内容。这非常有效,除了
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测试系统……即使你们可以做到这一点,你们不会测试在实际使用中不会发生的事情吗?找到一种方法让测试系统知道它是一个被删除的单元,这似乎不是更好吗?我很想知道,但是测试系统是一个预编译的库,所以我不能让它像真正的用户那样忽略隐藏的对象。那么,在测试本身中,相对于系统来说,如何呢?你能检查一个隐藏的属性吗?不直接熟悉弗兰克测试系统。。。