意外的UITableViewSeparatorView版本导致应用程序启动时崩溃

时间:2011-09-14 15:18:30

标签: iphone ios ipad ios4

此严重错误仅在模拟器中每10次运行一次,因此调试非常困难。当我的tableView从应用程序启动加载内容时,我收到了某种malloc错误。我启用了nszombies,当错误最终重新出现时,我得到了这个输出:

objc[71060]: Class _NSZombie__UITableViewSeparatorView is implemented in both ?? and ??. One of the two will be used. Which one is undefined.
2011-09-14 11:01:46.080 My_App[71060:7307] *** -[_UITableViewSeparatorView release]: message sent to deallocated instance 0x4e398e0

我首先注意到在将此代码添加到tableView(用户在应用启动后看到的第一个屏幕)后发生此错误

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
if(UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
    return 90;
else
    return 50;
}

此代码的要点是(显然)分别为iPad和iPhone目标中的表定义不同的行高。

代码的这一部分有问题吗?

2 个答案:

答案 0 :(得分:1)

嗯,这是最糟糕的错误(有时只重复)。好吧,我能给你的最好建议是NSLog很多。这听起来像是一条无益的建议,但过度使用NSLog确实可以帮助我调试这种错误。

答案 1 :(得分:1)

最好的方法是使用两个常量更改代码 您可以在.m文件的开头添加这两行

#define isAniPad    (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
#define HEIGHT_ROW (isAniPad ? 90.0 : 50.0)

此后只需致电

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath
{
   return HEIGHT_ROW;
}