此严重错误仅在模拟器中每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目标中的表定义不同的行高。
代码的这一部分有问题吗?
答案 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;
}