我正在尝试使用以下方法从另一个类调用具有(id)sender
的函数:
-(IBAction) runAgainButton:(id)sender {
ViewControllerName *instance = [[ViewControllerName alloc] init];
[instance startFunctionName:nil];
}
但该功能不会执行。 'startFunctionName
'位于Class1.m中,我试图在Class2.m中调用它。其他人建议在其他文章中将nil
传递给(id)sender
,但它对我没有用,我无法弄清楚nil
还应该替换(id)sender
{1}}。
'startFunctionName
'应该创建一个摄像机视图控制器,以使用前置摄像头开始扫描条形码。第一次在Class1ViewController
中调用此功能(按下按钮后),相机完全加载并扫描我需要的内容。扫描完成后,它会加载Class2ViewController
以及我遇到'runAgainButton
'问题的地方。 “runAgainButton
”与应用中的按钮相关联。当我点击该按钮时,它应该通过打开摄像机视图控制器再次运行“startFunction
”以开始扫描条形码。我只是将“startFunctionName
”的代码复制到另一个类中,但它是300多行代码。如果有人知道这里发生了什么,可以帮助我,那将是伟大的!谢谢!
答案 0 :(得分:2)
问题在于这一行:
ViewControllerName *instance = [[ViewControllerName alloc] init];
在这里,您将创建一个全新且独立的ViewControllerName类实例。但那是错误的实例。 已经已经在视图控制器层次结构中的某个位置,而 是您要与之对话的实例。
答案 1 :(得分:0)
您可以将第一个viewController的引用传递给第二个,并将其作为变量存储,然后直接调用它或根据它的用法创建一个公共方法。
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "GoToSecond" {
var secondViewController = segue.destinationViewController as! SecondViewController
secondViewController.firstViewController = self
}
}
然后在你的secondViewController中,你可以直接从前一个实例调用该方法。
self.firstViewController.runAgainButton()
答案 2 :(得分:0)
@property (strong, nonatomic) Class1ViewController *class1VC;
- (IBAction)startFunctionName: (id) sender;
并通常在'Class1ViewController.m'文件中定义此方法。class2Object.class1VC = self;
其中'class2Object'是类'Class2ViewController'的实例 -(IBAction) runAgainButton:(id)sender
{
[self.class1VC startFunctionName:nil];
}
,其中'self.class1VC'包含类'Class2ViewController'的实例