问题标签 [respondstoselector]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4341 浏览

ios - -[ViewController respondsToSelector:]:消息发送到已释放实例 - 在 tableview 滚动

SO已经提出了类似的问题。我的情况略有不同,因此我将其作为新问题发布。

我有一个 scrollView 作为控制器的主视图。它包含两个子视图:

  1. Scrollview 有一个 UIView 作为孩子。
  2. 包含一些数字文本字段的表格视图。

我已将一个附加UITapGestureRecognizer到子滚动视图,以便用户可以从任何文本字段中关闭键盘。

现在,如果我继续滚动 tableview 一段时间,我会因标题中提到的消息而崩溃。使用仪器的堆栈跟踪如下:

堆栈跟踪

在此处输入图像描述

我无法理解我的控制器负引用计数的原因。我没有设置任何滚动视图委托,那么为什么引用计数变为-1?

我已经尝试将手势附加到主滚动视图、tableview 本身和子 UIView,但仍然遇到同样的崩溃。请有人指出我正确的方向..谢谢。

编辑

我刚刚得到的另一个堆栈跟踪:

在此处输入图像描述

0 投票
1 回答
1353 浏览

objective-c - 响应选择器 - 不工作

我已经阅读了大约 10 篇文章,但没有发现我的实现有什么问题。

这个应用程序是用 iOS 6 编写的,但更新到 iOS7,所以我想同时支持 iOS6 和 iOS7。但是,如果我在 iOS6 设备上运行仅限 iOS7 的方法,它就会中断。所以我想添加responsToSelector,检查它上面有iOS7,但由于某种原因,if总是返回false。

AppDelegate.m:

有人可以告诉我我做错了什么吗?

编辑:我尝试将部署目标设置为 iOS6 和 iOS7,两种情况都返回 false。

Edit2:如果我删除 if 语句并调用该方法,它会在 iOS7 中按预期工作。

0 投票
2 回答
1239 浏览

ios - 如何在 Objective-C 中测试代理对象上的选择器?

当你只有一个代理对象时,有什么方法可以测试选择器/方法?

0 投票
1 回答
130 浏览

ios - 如何动态准备选择器以与respondsToSelector匹配

给定一个具有以下属性的类:

@property(nonatomic,retain) NSString* un_conventional;

我尝试像这样形成一个选择器:

PS:理所当然的认为这key是一个有值的变量un_conventional

问题似乎是这与正确的设置方法不匹配,因为capitalizedString原因setterMethod被命名setUn_Conventional而不是setUn_conventional......字母“c”也大写!

那么有没有人对如何为这种情况动态准备选择器有任何建议,以便它产生一个命名的选择器setUn_conventional并且可以用于通过respondsToSelector进行匹配?

0 投票
0 回答
717 浏览

ios7 - repondsToSelector:未声明的选择器警告,在运行时工作正常

我有一个更大的项目,此代码不会创建警告。我创建了一个新的小项目,只是为了为目标视图控制器尝试不同的想法。

我已经搜索了所有以前对类似问题的答案,并有以下想法。

1)我可以忽略警告,因为它工作得很好,但我不想。

2) 为什么我在较大的项目上没有收到警告,但在这个新项目上却收到了警告?当我将视图控制器类带到新项目时,我是否忘记了一些事情。

3) 自从我在 XCode4 和 iOS6 中开始了更大的项目后,发生了什么变化(尽管它在 XCode5 和 iOS7 中运行良好)?新项目是在 XCode5 中启动的,这有什么不同吗?

4)我可以通过导入目标视图控制器标题来消除警告,但我认为在我的项目中使用 respondsToSelector 作为方法 setMilage: 时我不应该这样做。

任何有助于提高我的理解的帮助将不胜感激。我确信我在某处犯了一个简单的错误,这只是令人沮丧,因为代码在一个项目中没有警告而在另一个项目中没有警告。

提前致谢。

ps 如您所料,我在 perfomSelector 也收到相同的警告。

完整的警告 - 语义问题未声明的选择器'setMilage:'

0 投票
2 回答
4291 浏览

objective-c - ( ConformsToProtocol: && RespondsToSelector: ) vs 只是 ( respondsToSelector: )

当想要在委托对象上调用协议方法时,希望实现各自的协议方法,我看到开发人员首先检查

这样做不是更好甚至更安全吗?:

我知道如果协议方法定义的结构正确,那么委托中不应该有任何冲突或实现可能不是针对/来自 MyProtocol。这样的冲突是牵强的,但我遇到了一个简单声明为 -(void)willStartLogin; 的协议方法定义。我确定您已经可以开始思考并建议这种协议方法有多糟糕,例如,它可能已由委托实现以供个人/内部使用,而不是在 myDelegate 协议下使用。最好这样声明 MyProtocol 的方法: -(void)myObjectWillStartLogin:(MyObject*)myObjectInstance; 以消除任何歧义并使事情变得明显。

我希望我没有遗漏任何只需要检查 respondsToSelector 的东西:谢谢

0 投票
1 回答
174 浏览

objective-c - respondsToSelector:相当于CoreFoundation?

我有一个CFArrayRefwhich most have CFDictionaryRef,但有时它会包含其他东西。如果可以的话,我想从数组中的字典中访问一个值,如果我不能,就不要崩溃。这是代码:

关于如何确保我只将设备视为 CFDictionary 如果这样做是正确的,有什么建议吗?

(我正在处理一些没有特别好的文档记录的开源代码,它似乎也不是特别可靠。我不确定数组包含非字典对象是错误还是错误它没有检测到它何时包含非字典对象,但在我看来,在这里添加检查不太可能破坏其他代码然后强制它只包含其他地方的字典.我不经常使用 CoreFoundation,所以我不确定我是否使用了正确的术语。)

0 投票
2 回答
1011 浏览

ios - Using __IPHONE_7_0 and respondsToSelector

I came across this code and I was wondering if the #ifdef check is redundant.

I tried removing it and running it in iOS 6 and it ran fine. Is there some special case I need to be aware of in iOS 6/7 that causes it to not trigger or causes crashes?

0 投票
3 回答
1206 浏览

objective-c - If instance respondsToSelector - why still "unrecognized selector sent to instance"?

Right, I'm officially confused.

This is called in a NSTableView subclass on 10.8 and as we can learn from the docs and the headers NSTableView implements NSDraggingSource so all should be good:

When the containing method (override of draggingSession:movedToPoint: in the subclass) is called, the second line however throws the beloved 'unrecognized selector sent to instance 0x1054092c0' exception.

Could anybody please explain what is going on here?!

0 投票
1 回答
471 浏览

objective-c - 转换为 (id) 以调用 Objective-C 中的任意方法

我有一种情况,我需要调用对象不一定支持的方法,但同时我不能使用 performSelector,因为它限制了你可以传递给方法的参数类型。因此我这样做:

编译器很高兴,我很高兴,但是这种消息发送方法有什么注意事项吗?

performSelector 的同步版本和上面的本质区别是什么?

编辑:与 (id) 方法相比, performSelector 是否存在性能损失?