多行 UIAlertView 消息崩溃

Posted

技术标签:

【中文标题】多行 UIAlertView 消息崩溃【英文标题】:Crash with multiline UIAlertView message 【发布时间】:2013-05-08 07:20:56 【问题描述】:

崩溃日志

-[UIAlertView displayScrollerIndicators]: unrecognized selector sent to instance 0x1fbaf120

代码是:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Some info",nil) message:str delegate:self cancelButtonTitle:NSLocalizedString(@"Close", nil) otherButtonTitles: nil];
alert.tag = 12345;
[alert show];

其中str 是带有\n 字符的巨大多行文本。

【问题讨论】:

您将 alertview 对象放置在 scrollView 对象的位置 在你的班级中搜索displayScrollerIndicators的出现检查你是否没有用alert's对象调用它。 请提供str的值,以便重现问题。 @rptwsthi UIAlertView 在文本行数等于或大于 13 时调用 displayScrollerIndicators。它不再显示可滚动的文本视图,它只是崩溃! 【参考方案1】:

有趣...这似乎是 UIAlertView 类中的错误。

我刚刚做了一个快速测试,显示 UIAlertView 包含多行消息 - 在 iPad 模拟器 (ios 6.1) 上,警报视图在显示 13 行或更多行时中断。似乎在 12 行之后警报视图不再变大,并且显然发生了一些错误,因为它认为它必须滚动,但没有可用的滚动视图。

所以,请确保在 UIAlertView 中显示的行数不超过 12 行...

更新:

我刚刚做了另一个测试 - 我发现崩溃不是(仅)与行数有关,而是与警报视图的 tag 属性的设置有关 - 当您没有设置 @987654324 @,它仍然可以工作并显示一个滚动视图 - 只是当你设置一个标签时,它会崩溃超过 12 行......奇怪。

更新 2(也是最后一个):

似乎如果tag 的整数值小于 12345(我测试了 1,12,123,1234)它也可以工作 - 只是更高的tag 值会导致崩溃。仍然很奇怪,因为tag 属性是NSInteger,因此应该至少有 32 位,所以 12345 应该没有任何问题溢出明智...

【讨论】:

在以前版本的 iOS 中,当消息为 13 行或更多行时,UIAlertView 中会出现可滚动的文本视图,现在它只是崩溃了...看起来有警报视图错误 哇,难以置信 :) 感谢您的帮助 谢谢.. 标签 12345 导致我在 iOS6 中崩溃(错误).. 而在 iOS7 中它可以在没有任何变化的情况下工作..【参考方案2】:

您在代码中的某处使用UIAlertView object 调用displayScrollerIndicators

【讨论】:

【参考方案3】:

我认为您做错了什么。您正在使用UIAlertView 的对象调用其他类方法。而且你不能调用这个方法,因为这个方法不在UIAlertView类下。

【讨论】:

【参考方案4】:

错误消息“unrecognized selector sent to instance XXX”表示应用正在尝试调用不存在的方法。这通常是因为在错误的对象上调用了该方法。

【讨论】:

以上是关于多行 UIAlertView 消息崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何在 UIAlertView 的消息字段中添加多行文本

如何使 UIAlertView 上的按钮多行显示?

动态更新 UIAlertView 消息和换行符问题

UIAlertView 和 UIAlertController

iOS5:有人设法用三个按钮和文本字段(UIAlertViewStylePlainTextInput)修复 UIAlertView 吗?

显示 UIAlertView 时崩溃