解决方案: 在许多人的帮助下,这已得到解决。我现在正在写这篇文章,以便有类似问题的人可以从中受益。为了让我重新创建这个bug,我必须在我的设备上运行分发版本。这是在MrMage的建议下完成的,该建议告诉我将证书更改为开发人员,而不是分发。这允许我重新创建错误并进行调试。问题是,编译器忽略了设置CGSize值的所有调用。我可以通过将目标首选项中的“优化级别”设置为“无”而不是“最快,最小”来阻止这种情况。
你好,
我的申请非常特别。几天前,我的应用程序被批准进入应用程序商店,但令我恐惧的是,我很快发现其中存在一个主要错误。我去了我的电脑,但是当运行代码时(在模拟器和设备上),这一切都完美无缺。我已经尝试了一切:重新编译并提交更新,清理所有目标,重新安装SDK等。
以下是该问题的更详细说明。我的应用程序中有一个详细的表视图,它从一个在线源加载一些数据。它在下载时显示加载视图,然后在设置数据源后重新加载tableview。表格的单元格包含UITextViews,它会更改大小以适合文本。当我在计算机上运行应用程序或在设备上进行调试时,文本会被下载并完美显示,但是当我从App Store下载并启动它时,它只会在第一次显示文本,然后留空休息。我知道数据会被下载,因为texviews调整自身以适应文本,他们只是不显示它。
有人知道可能导致此错误的原因吗?我如何知道我的发行版本是否包含错误,而这个错误在调试版本中没有显示?
此致, BEN。
PS:我已经比较了调试和分发版本的目标设置。我看到的唯一区别是“代码生成”下的“优化级别”。我试图为调试版本更改它,但它没有揭示问题。
- (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];
}
答案 0 :(得分:3)
您是否尝试过采用分发版本配置并将其代码签名选项更改为iPhone开发人员,然后在您的设备上测试该版本?
据我所知,您现在还可以上传使用开发者证书签名的二进制文件。因此,您可以将一个正在运行的开发人员构建并将其提交给Apple。
答案 1 :(得分:2)
您是否测试过优化版本?优化器可以做一些非常时髦的事情(比如重新排列代码),如果你有一个未初始化的变量,这可能会导致问题。
我还建议运行Clang(做一个Build&amp; Analyze)。
答案 2 :(得分:0)
自更新以来,您是如何更改代码的? (我希望你使用某种形式的版本控制)我不认为目标设置与它有很大关系。
与此同时,如果对错误有批评,我会将其从商店中删除。然后努力使下一个版本稳定并广泛地测试它。
(我认为您不需要使用自定义tableView单元格来调整文本大小,我很确定Apple的库存会自动执行此操作。)
答案 3 :(得分:0)
在狂野猜测的标题下。
我会考虑您的开发环境与正常运营环境之间的任何差异。例如,在我的开发环境中,除了电话,我的iPhone默认为我的wifi。由于某些网络操作对时间和带宽敏感,因此可能是在3G /边缘上操作是问题。
我正在尝试考虑可能导致textviews缩放以保留文本但不显示文本的原因。如果没有任何东西适合,textview无法缩放以适应。这表明文本由空格组成,或者由于某种原因文本颜色的alpha为零。您是否设置了文本颜色/字体?