【发布时间】:2011-01-13 18:23:06
【问题描述】:
解决方案: 在很多人的帮助下,这个问题已经解决了。我现在写这篇文章,以便有类似问题的人可以从中受益。为了让我重新创建这个错误,我必须在我的设备上运行分发版本。这是按照 MrMage 的建议完成的,它告诉我将证书更改给开发人员,而不是分发。这使我可以重新创建错误并对其进行调试。问题原来是编译器忽略了所有设置 CGSize 值的调用。我可以通过将目标首选项中的“优化级别”设置为“无”而不是“最快、最小”来防止这种情况。
你好,
我的应用程序中有一个非常奇特的地方。几天前,我的应用程序获得了应用商店的批准,但令我惊恐的是,我很快发现它存在一个重大错误。我去了我的电脑,但是当我运行代码时(在模拟器和设备上),一切都很完美。我已经尝试了一切:重新编译并提交更新、清理所有目标、重新安装 SDK 等。
这里有更详细的问题描述。我的应用程序中有一个明细表视图,它从在线资源加载一些数据。它在下载时显示加载视图,然后在设置数据源后重新加载表格视图。表格的单元格包含 UITextViews,它会改变大小以适应文本。当我在电脑上运行应用程序,或者在设备上调试时,文本被下载并完美显示,但是当我从 App Store 下载并启动它时,它只会在第一次显示文本,然后留空为休息。我知道数据会被下载,因为 texviews 会自行调整大小以适应文本,它们只是不显示它。
有人知道是什么导致了这个错误吗?我如何知道我的分发版本是否包含错误,而该错误未显示在调试版本中?
你的, 本。
PS:我已经比较了调试和分发版本的目标设置。我看到的唯一区别是“代码生成”下的“优化级别”。我已尝试为调试版本更改此设置,但未发现问题。
编辑:我按照 MrMage 的建议解决了这个问题。事实证明,这段代码确实是错误的原因。在调试器中运行时,'s'的width和height属性始终为零,无论如何我都无法更改。我正在研究为什么会发生这种情况。
- (void) setText:(NSString *)string
{
CGSize s = [string sizeWithFont:textView.font constrainedToSize:CGSizeMake(290, FLT_MAX)];
s.height += kStaticSize;
//SizeWithFont is very unreliable so have to do some dirty tweaking
if (s.height > 100 && s.height <= 250)
s.height += 20;
else if (s.height > 250 && s.height <= 500)
s.height += 40;
else if (s.height > 500 && s.height <= 800 )
s.height += 50;
else if (s.height > 800 && s.height <= 1200)
s.height += 60;
else if (s.height > 1200 && s.height <= 1700)
s.height += 100;
else if (s.height > 1700)
s.height += 200;
s.width = 290;
CGRect r = textView.frame;
r.size = s;
[textView setFrame:r];
[self.textView setText: string];
[self.textView setNeedsDisplay];
}
【问题讨论】:
-
您应该在完善最终解决方案时保持更新。这是一个有趣的问题,可能其他人也会遇到。
-
很好的建议,'除非我已经这样做了,在我原来的帖子的顶部。
-
我认为理想的解决方案是找到错误的真正原因,将优化级别降低到类似于调试构建的东西只是一种快速的解决方法。如果您的代码在逻辑上是正确的,那么无论二进制文件是否经过优化,都不会出现该错误。
-
我记得这个朋友只在发布版本时崩溃,而不是调试。事实证明他在滥用 C 字符串函数,但在调试(未优化)设置中,恰好有很多“安全”,空内存填充他的变量两侧,因此非法访问没有发生。也许您的代码正在发生类似的事情。
标签: iphone cocoa-touch debugging distribution