Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/105.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从另一个类调用具有(id)sender的函数不起作用_Ios_Objective C_Xcode6_Ibaction - Fatal编程技术网

Ios 从另一个类调用具有(id)sender的函数不起作用

Ios 从另一个类调用具有(id)sender的函数不起作用,ios,objective-c,xcode6,ibaction,Ios,Objective C,Xcode6,Ibaction,我正在尝试使用以下命令从其他类调用具有(id)sender的函数: -(IBAction) runAgainButton:(id)sender { ViewControllerName *instance = [[ViewControllerName alloc] init]; [instance startFunctionName:nil]; } 但该函数将不会执行。”startFunctionName'位于Class1.m中,我试图在Clas

我正在尝试使用以下命令从其他类调用具有
(id)sender
的函数:

    -(IBAction) runAgainButton:(id)sender {
        ViewControllerName *instance = [[ViewControllerName alloc] init];
        [instance startFunctionName:nil];
    }
但该函数将不会执行。”
startFunctionName
'位于Class1.m中,我试图在Class2.m中调用它。其他人在其他文章中建议将
nil
传递给
(id)发送者
,但这对我不起作用,我不知道还有什么可以代替
nil
传递给
(id)发送者


startFunctionName
”应创建一个摄像头视图控制器,以使用前向摄像头开始扫描条形码。第一次在
ClassViewController
中调用此函数时(按下按钮后),相机会很好地加载并扫描我需要的内容。扫描后,它将加载
Class2ViewController
,而我遇到的问题是“
runAgainButton
runAgainButton
”与应用程序中的按钮关联。当我点击该按钮时,它应该再次运行“
start”功能,打开摄像头视图控制器开始扫描条形码。我只想将“
startFunctionName
”的代码复制到另一个类中,但它有300多行代码。如果有人知道这里发生了什么并且能帮助我,那就太好了!谢谢

问题在于这一行:

ViewControllerName *instance = [[ViewControllerName alloc] init];

这里,您正在创建ViewControllerName类的一个全新的独立实例。但这是错误的例子。在视图控制器层次结构中的某个位置必须已经存在该类的实例,并且该实例就是您要与之对话的实例。

您可以将引用从第一个视图控制器传递到第二个视图控制器,并将其存储为变量,然后直接调用它或根据其用法创建公共方法

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == "GoToSecond" {
        var secondViewController = segue.destinationViewController as! SecondViewController
        secondViewController.firstViewController = self 
    }
}
然后,在第二个ViewController中,可以直接从上一个实例调用该方法

self.firstViewController.runAgainButton()
  • 在类“Class2ViewController.h”中创建属性
  • @property (strong, nonatomic) Class1ViewController *class1VC; 
  • 在“ClassViewController.h”中声明iAction方法
    并在“ClassViewController.m”文件中定义此方法
  • 现在,当您从“ClassViewController”导航到“Class2ViewController”时,请将属性填充为:
    其中“class2Object”是类“Class2ViewController”的实例
  • 在类“Class2ViewController”中,您定义了方法
    ,其中“self.class1VC”包含类“Class2ViewController”的实例
  •  -(IBAction) runAgainButton:(id)sender
    {
        [self.class1VC startFunctionName:nil];
    }
  • 希望它能解决你的问题

  • 分配一个本地视图控制器不会让你走得很远;当该方法返回时,您认为视图控制器实例会发生什么情况?我将如何与该实例对话?您必须知道它在视图控制器层次结构中的位置,并获取对它的引用。这是一个非常有趣的问题,我的书中有很多章节专门讨论这个问题:您的解决方案是一个有趣的选择,我可能会进一步探讨它,但由于它现在是这样,并且在我的程序中实现了它,它不起作用。它实际上破坏了我的计划。不过,我很感谢你的努力。
    class2Object.class1VC = self;
     -(IBAction) runAgainButton:(id)sender
    {
        [self.class1VC startFunctionName:nil];
    }