【问题标题】:Calling method from different class sometimes works and sometimes doesn't从不同类调用方法有时有效,有时无效
【发布时间】:2015-09-12 05:09:51
【问题描述】:

我正在尝试从一个类中调用另一个类中的一组方法。

这些方法都驻留在我的 ViewController.m 类中,我正在尝试从另一个名为 MyClass.m 的类中调用它们。

有时有效,有时无效。

我得到的错误是

unrecognized selector sent to class 0x1071c0050

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[ViewController setProgressValue:]: unrecognized selector sent to class 0x1071c0050'

当错误提示 [ViewController setProgressValue:] 出现问题时,该错误会从同样驻留的 ViewController.m 中专门调用。

流程如下所示: ViewController.methodA -> MyClass.methodB -> ViewController.methodB

这不起作用,但以下工作 ViewController.methodA -> MyClass.methodB -> ViewController.methodC

为什么第一个流程不起作用,而第二个流程起作用?

【问题讨论】:

    标签: ios xcode class methods call


    【解决方案1】:

    错误是非常描述性的。您正在调用一个不存在的方法。

    您将setProgressValue: 作为类方法调用,它可能是一个实例方法。请注意错误描述中的“+”。您需要在 ViewController 的具体实例上调用它。

    【讨论】:

    • 我该怎么做?您能否给我一份参考文档或一些参考代码,说明如何在ViewController 的具体实例上调用它。
    • 如果你不知道这些区别,我真的会从Objective-C编程的一些基本介绍开始。如果您发布代码,我们至少可以修复它。
    【解决方案2】:

    如果我要在没有看到您的代码的情况下做出有根据的猜测,我会说在您的 header 中您声明了一个看起来像这样的方法:

    + (void)setProgressValue:(float)progress

    在你的实现中你有一个看起来像这样的方法:

    - (void)setProgressValue:(float)progress { // Blah... }

    请注意,方法声明是不同的。一个被声明为静态(注意+),另一个被声明为实例方法(注意实现中的-)。您的标头声明它存在,而实际上您的实现中不存在该静态方法。

    【讨论】:

    • 如果这就是你所拥有的,那就是问题所在。您需要将标题中的声明从 + (void)setProgressValue:(float)progress 更改为 - (void)setProgressValue:(float)progress 请注意 - 而不是 +
    猜你喜欢
    • 1970-01-01
    • 2015-02-11
    • 2012-08-02
    • 2015-03-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多