如何停止 UIView 的警告可能无法响应选择器

Posted

技术标签:

【中文标题】如何停止 UIView 的警告可能无法响应选择器【英文标题】:How to stop warning for UIView may not respond to selector 【发布时间】:2010-12-02 22:57:18 【问题描述】:

我有一个具有 UIView 作为属性的类。有时我会传入一个 UILabel;有时是 UITextField。无论我传入哪个,我都希望类设置文本。目前我正在这样做,它有效:

if ([self.viewToUpdate respondsToSelector:@selector(setText:)] && !self.newAnswer)
    [self.viewToUpdate setText:[[self.choices objectAtIndex:indexPath.row] text]];

问题是,这会发出警告,因为即使我正在检查respondsToSelector,Xcode 也不知道我的 UIView 会响应 setText:。如何删除此警告?

我知道我可以专门检查它是 TextField 还是 Label,然后分别转换为 TextField 或 Label,但这会很痛苦,如果我有更多类型的视图,我必须为每一行添加几行代码。

我考虑过创建自己的协议,然后让我的班级将 id 作为 viewToUpdate 的类型...但当然 UITextField 和 UILabel 不符合该协议...

【问题讨论】:

【参考方案1】:

尝试将其转换为 id:

if ([self.viewToUpdate respondsToSelector:@selector(setText:)] && !self.newAnswer)
    [(id)self.viewToUpdate setText:[[self.choices objectAtIndex:indexPath.row] text]];

【讨论】:

谢谢!不敢相信我没想到。很简单!虽然 (id) 需要放在第二行,而不是第一行。 您最好测试对象以确定它是否属于您期望的类,然后转换为该特定类,而不是直接转换为 id。如果 self.viewToUpdate 与现在的类不同,那么至少你可以避免崩溃。 Ryan,因为我正在测试 respondsToSelector;究竟是什么类 viewToUpdate 并不重要。我只知道这是一个具有 setText: 方法的 UIView;我不知道它是什么类型的 UIView;而且我不想单独测试每种类型的 UIView。

以上是关于如何停止 UIView 的警告可能无法响应选择器的主要内容,如果未能解决你的问题,请参考以下文章

此页面上的脚本造成Web浏览器运行速度减慢。如果继续运行,您的计算机将可能停止响应。

在 iPhone 中收到警告:NSString 可能无法响应“-JSONValue”

Xcode 警告:“可能无法响应”

停止 UIView 动画 [重复]

应用程序崩溃说集合表达式类型 UIView*' 可能无法响应 'countByEnumeratingWithState:object:count"'

警告!无法停止 Node.js 应用程序?