滚动时UITableViewCells有时会消失

时间:2012-07-19 10:20:32

标签: iphone ios objective-c cocoa-touch cydia

我会尝试尽可能具体地描述我遇到的问题。这是我前段时间已经问过的问题,但没有得到任何答复。我指的是因为你会看到过去几天做过的一些编辑。旧问题已被删除,这是更新的问题。

首先,我想澄清这种情况偶尔会发生。这就是为什么我很难弄清楚究竟发生了什么。

我编写了一个iPhone应用程序,它使用UITableView来显示一组用户可以触摸以触发某些功能的“按钮”和“设置”(很像Settings.app)。 它的问题在于,有时每当我向下滚动然后再向上时,应该显示在屏幕底部的一些单元格就会完全消失。

看起来设备“决定”它们不在屏幕上,因此停止显示它们(可能会解除它们吗?)。

另一个奇怪的事情是,这种情况从未发生在iPhone模拟器上,而它只发生在实际设备上并随机发生。当它发生时,它会在程序启动时发生(不是在以后的时间)并且一直发生,直到我从多任务栏关闭我的应用程序并再次启动它。

供参考,这是我的`tableView:cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
static NSString *SwitchCellIdentifier = @"SwitchCell";
UITableViewCell *cell = nil;
// Two separate cell pools, one for normal cells, one for cells with switches
if (indexPath.section <= sectionSettings && indexPath.row < indexTestMode)
{
    cell = [tableView dequeueReusableCellWithIdentifier:SwitchCellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:SwitchCellIdentifier];
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
        cell.accessoryType = UITableViewCellAccessoryNone;
        // Adds switches
        UISwitch *aSwitch = [[UISwitch alloc] initWithFrame:CGRectZero];
        [aSwitch addTarget:self action:@selector(switchChanged:) forControlEvents:UIControlEventValueChanged];
        cell.accessoryView=aSwitch;
    }
}
else
{
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
    cell.selectionStyle = UITableViewCellSelectionStyleBlue;
    cell.accessoryType = UITableViewCellAccessoryNone;
    cell.accessoryView = nil;
    cell.imageView.image = nil;
}
// Cell configuration
cell.textLabel.font = [UIFont boldSystemFontOfSize:[UIFont systemFontSize]];
cell.textLabel.textAlignment = UITextAlignmentLeft;
// Sets section-specific styles
switch (indexPath.section)
{
    ... just some cell configuration (text, images, styles etc.)
}
return cell;
}

StackOverflow上建议的所有解决方案(我花了很多时间研究,真的)类似的问题都没有对我有用。

其他信息:

  • 使用iPhone 5.1 sdk编译的项目,目标是iOS 4.0及更高版本。
  • 编译的二进制文件很胖,因为我必须支持armv6和armv7架构。
  • armv6的THUMB支持已关闭,而armv7的支持已关闭(由Apple推荐)。
  • 使用自动引用计数。
  • 该应用仅适用于越狱设备,因为它需要耗尽沙箱。它可以在Cydia上找到。
  • 已编译的二进制文件是使用我使用标准Mac Keychain工具(未使用ldid伪签名)创建的证书进行自签名的。对于那些不知道,自签名或伪签名的人来说,二进制文件是强制性的,因为我的应用程序是通过Cydia安装的(因此没有由Apple签名)。
  • 测试设备是运行iOS 5.1.1 jailbroken的iPhone 4s。

非常感谢任何帮助。


编辑(2012年7月17日):一些其他信息和截图。发生这种情况时,如果我触摸其中一个tableview单元格,另一个获取“选定”动画,但执行正确的操作。动作在“didSelectRowAtIndexPath”方法中实现,因此使用正确的“indexPath”调用该方法,而其他地方则出错。

我开始认为这可能是Apple的一面。我仔细检查了我的tableview方法,看起来很好。

截图

应该如何: http://i49.tinypic.com/i77nzd.jpg

向下滚动和备份后如何: http://i45.tinypic.com/311kgte.jpg

请注意,如果我向下滚动并备份几次,我也可以“触发”底部单元格的消失。


编辑(2007年7月19日):我收录了更多其他信息。而且,这是另一个更新:

该项目正在使用其他两个tableView,他们都没有遇到过这个问题。有问题的人和没有问题的人之间的主要区别是:

  • “窃听”的部分有多个部分,而另外两部分只有一部分。
  • “bugged”没有实际的“数据源”(数组或字典或其他任何东西),标签在cellForRowAtIndexPath方法中是硬编码的。另外两个使用数组来存储他们向用户显示的数据。
  • “cellForRowAtIndexPath”方法更加“复杂”(由于额外的单元格配置,主要是美容调整)在被窃听的方法上比其他方法更复杂。

今天我尝试使用“数据源”(包含要显示的所有必需字符串的数组)用于错误的数据源,但问题在重新启动几次后再次发生,因此这不是罪魁祸首。我意识到这可能不是原因,但我只想尝试任何我想到的事情。

同样,非常感谢任何形式的帮助。

0 个答案:

没有答案
相关问题