【问题标题】:Objective-C - Access method from other controllerObjective-C - 来自其他控制器的访问方法
【发布时间】:2023-04-11 00:27:01
【问题描述】:

我有一个关于访问另一个控制器中的方法的小问题,我正在尝试这个。 例如,我有控制器 A 和 B。在控制器 A 中,我编写了一个方法,现在我想通过控制器 B 访问它。

我在头文件的A类中做了什么:

+(void)goBack;

并在实现文件中:

+(void)goBack {
NSLog(@"go back");
}

在控制器 B 中,我这样做是为了访问控制器 A 中的方法:

+(void)goPreviousArticle:(id)sender {
ViewProductInformation_ViewController *theInstance = [[ViewProductInformation_ViewController alloc] init];
[theInstance goBack];
}

但是,当我执行程序时,它不起作用,程序只是关闭,当我执行命令单击控制器 B 中的功能 goBack 时,我会参考控制器 A 中的方法。

有人知道问题可能是什么吗?

提前致谢,

下雪

【问题讨论】:

  • Xcode 只是 IDE - 语言是 Objective-C。 (因此,我重新标记了您的问题。)
  • 为什么使用静态(+)函数?

标签: iphone objective-c methods controller


【解决方案1】:

这很容易......你只是混合了类和实例方法声明:“+”号表示该方法是类方法。在你的情况下,它应该是一个“-”所以

-(void)goBack; // a instance method declaration!

希望这会有所帮助。

类与实例方法声明...另见What is the difference between class and instance methods?

【讨论】:

  • 这肯定有帮助!经过数小时的搜索,我很高兴您能给我一个解决方案。也谢谢你的解释,这对我来说已经清除了很多!
【解决方案2】:

您将 goBack 声明为 CLASS 方法(带有前面的“+”)。将 + 更改为 -。

【讨论】:

    【解决方案3】:

    由于goBack是A类的静态方法,所以不需要A的实例来调用它的方法,可以这样调用:

    [ClassA 后退];

    【讨论】:

    • 我试过了,但对我没有用,上面的解决方案对我来说很好。
    【解决方案4】:

    你不需要声明静态函数,你可以这样写:

    -(void)goBack {
    NSLog(@"go back");
    }
    

    在A类和B类中相同:

    -(void)goPreviousArticle:(id)sender {
    ViewProductInformation_ViewController *theInstance = [[ViewProductInformation_ViewController alloc] init];
    [theInstance goBack];
    }
    

    然后使用它们。我认为在这种情况下应用程序不会崩溃。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多