Objective-C:类如何安全地调用全局方法?

发布于 2024-11-17 09:40:27 字数 590 浏览 2 评论 0 原文

我尝试过并得到“SIGBRT”异常。 在 Global.m 中,我有 methodBGlobal()

在 ClassA 中,我包含了 Global.h 以便使用 methodGlobal()ClassA.methodA() 中有 methodGlobal()

然后我在 Global.m 中有按钮。因为我不知道如何在 Global.m 中正确调用 methodGlobal() 。所以我通过 ClassA 实例调用 methodGlobal()

[mybutton addTarget:ClassA instance action:@selector(methodA:) ...];

它不起作用。我收到“SIGBRT”异常,我不知道 ClassA.methodA() 中的 methodGlobal() 是否被调用?我希望 methodGlobal 能够工作。

I have tried and got "SIGBRT" exception.
In Global.m, I have methodBGlobal().

In ClassA, I included Global.h in order to use methodGlobal().
ClassA.methodA() has methodGlobal() in it.

Then I have button in Global.m. Since I do not know how to call methodGlobal() properly in Global.m. SO I call the methodGlobal() through ClassA instance.

[mybutton addTarget:ClassA instance action:@selector(methodA:) ...];

It does not work. I got "SIGBRT" exception and I do not know that methodGlobal() in ClassA.methodA() was called or not? I want methodGlobal to work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

月隐月明月朦胧 2024-11-24 09:40:27

这里您需要考虑两件事。

  1. 如果该方法是类方法,则目标应为[ClassA 类]
  2. 如果方法签名不包含任何参数,例如,-(void) methodA;,那么,@ 中不应包含冒号(":")选择器。因此,选择器应该只是@selector(methodA)

最后 addTarget: 方法应该类似于

[mybutton addTarget:[ClassA class] action:@selector(methodA) ...];

References:

  1. Target-Action 来自 iOS 的 Cocoa 应用程序能力。
  2. 目标操作机制基础指南。

Two things you need to consider here.

  1. If the method is a class method, then the target should be [ClassA class].
  2. If the method signature doesn't include any arguments , for ex., -(void) methodA; then, there should be not colon(":") included in the @selector. So, the selector should be just @selector(methodA).

Finally the addTarget: method should look like,

[mybutton addTarget:[ClassA class] action:@selector(methodA) ...];

References:

  1. Target-Action from Cocoa Application Competencies for iOS.
  2. The Target-Action Mechanism from Cocoa Fundamentals Guide.
倾听心声的旋律 2024-11-24 09:40:27

您可以通过创建像 + (void) doAction 这样的类方法来做到这一点,现在您可以将此方法与类名一起使用,例如 [ClassName doAction]

you can do this by making class method like + (void) doAction now you can use this method with the class name like [ClassName doAction]

浮云落日 2024-11-24 09:40:27

试试这个:

[mybutton addTarget:[ClassA class] action:@selector(methodA:) ...];

Try this :

[mybutton addTarget:[ClassA class] action:@selector(methodA:) ...];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文