Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/40.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
来自另一个类的Iphone调用方法_Iphone_Objective C - Fatal编程技术网

来自另一个类的Iphone调用方法

来自另一个类的Iphone调用方法,iphone,objective-c,Iphone,Objective C,我有一个多个XIB文件项目。我有一个switchViewController类,用于处理内容视图的切换。我想从其他类调用这个类中的方法。我有以下代码: //SwitchViewController.h Code: #import <UIKit/UIKit.h> @class MainMenuViewController; @class GlassRepairsViewController; @interface SwitchViewController : UIViewCont

我有一个多个XIB文件项目。我有一个switchViewController类,用于处理内容视图的切换。我想从其他类调用这个类中的方法。我有以下代码:

//SwitchViewController.h

Code:

#import <UIKit/UIKit.h>
@class MainMenuViewController;
@class GlassRepairsViewController;

@interface SwitchViewController : UIViewController {
 MainMenuViewController *mainMenuViewController;
 GlassRepairsViewController *glassRepairsViewController;

}


@property (retain,nonatomic) MainMenuViewController *mainMenuViewController;
@property (retain,nonatomic) GlassRepairsViewController *glassRepairsViewController;

-(IBAction)goToGlassRepairs;
-(IBAction)goToMainMenu;

@end

//switch view controller m file
Code:

#import "SwitchViewController.h"
#import "MainMenuViewController.h"
#import "GlassRepairsViewController.h"


@implementation SwitchViewController
@synthesize MainMenuViewController;
@synthesize GlassRepairsViewController;

- (void)viewDidLoad {
 MainMenuViewController *mainMenuController = [[MainMenuViewController alloc] initWithNibName:@"MainMenuView" bundle:nil];
 self.mainMenuViewController = mainMenuController;
 [self.view insertSubview:mainMenuController.view atIndex:0];
 [mainMenuController release];
    [super viewDidLoad];
}
//These IBActions are linked to buttons on the view that is linked to this class (swtichViewController)  This works perfectly for showing different nibs

-(IBAction) goToGlassRepairs
{
 if(self.glassRepairsViewController.view.superview == nil)
 {
  if(self.glassRepairsViewController == nil)  
  {
   GlassRepairsViewController *glassRepairsController = [[GlassRepairsViewController alloc] initWithNibName:@"GlassRepairsView" bundle:nil];
   self.GlassRepairsViewController =glassRepairsController;
   [glassRepairsController release];  
  }
  [mainMenuViewController.view removeFromSuperview];
  [self.view insertSubview:glassRepairsViewController.view atIndex:0]; 
 } 
}

-(IBAction) goToMainMenu
{
 if(self.mainMenuViewController.view.superview == nil)
 {
  if(self.mainMenuViewController == nil)  
  {
    MainMenuViewController *mainMenuController = [[ MainMenuViewController alloc] initWithNibName:@"MainMenuView" bundle:nil];
   self.mainMenuViewController = mainMenuController;
   [mainMenuController release];  
  }
  [glassRepairsViewController.view removeFromSuperview];
  [self.view insertSubview:mainMenuViewController.view atIndex:0]; 
 } 

}

//MainMenuViewController.h
Code:

#import <UIKit/UIKit.h>

@class SwitchViewController;


@interface MainMenuViewController : UIViewController {

}

-(IBAction)goToGlass;


@end

//MainMenuViewController.m

Code:

#import "MainMenuViewController.h"
#import "SwitchViewController.h"


@implementation MainMenuViewController


-(IBAction)goToGlass
{
  **//This is where I want to call the goToGlassRepairs method that is inside SwitchViewController's class...**


}
它编译时没有警告,但出现以下错误:

2010-03-09 15:51:28.350 Alfa2Go[29535:207]***-[GoAppDelegate goToGlassRepairs]:发送到实例0x3b26620的无法识别的选择器

2010-03-09 15:51:28.362 Go[29535:207]*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'*


-[GoAppDelegate goToGlassRepairs]:发送到实例0x3b26620'的无法识别的选择器

好吧,我猜
[[UIApplication sharedApplication]委托]
没有返回
SwitchViewController
,而是返回
GoAppDelegate
。您需要先找到您的
SwitchViewController
,然后才能对其调用方法。

您可以在MainMenu类中创建属性(例如,id switchController)。
由于switch view controller处理MainMenu的分配,它还可以将此属性设置为自己,因此MainMenu类将有一种访问控制器的方法…

最终实现了这一点:


我所做的是在app委托中添加了一个函数,该函数调用switchview控制器中的display函数。然后我将应用程序代理导入主菜单,并创建了一个调用应用程序代理函数的函数。

ok,即使我尝试:switchViewController*s=[[switchViewController alloc]init];[s goToGlassRepair];它给我警告说s可能不会响应goToGlassRepairCheck拼写检查?您的第一个switchViewController没有大写,其他的都是。另外,你发布的代码上写着“goToGlassRepairs”,但你的代码上写着“goToGlassRepair”。当然,要确保包含头文件。
`SwitchViewController *s = (SwitchViewController *)[[UIApplication sharedApplication] delegate];

[s goToGlassRepairs];`