У меня есть проект с несколькими файлами 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...**
}
SwitchViewController — это класс, который обрабатывает, какие перья отображать и удалять. MainMenu и glassRepairs — это представления содержимого. Однако MainMenu должен получить доступ к методам класса switchviewcontroller, чтобы обеспечить навигацию из представления содержимого.
я пробовал
`SwitchViewController *s = (SwitchViewController *)[[UIApplication sharedApplication] delegate];
[s goToGlassRepairs];`
Он компилируется без предупреждений, но выдает следующие ошибки:
09.03.2010, 15:51:28.350 Alfa2Go[29535:207] *** -[GoAppDelegate goToGlassRepairs]: нераспознанный селектор отправлен в экземпляр 0x3b26620
2010-03-09 15:51:28.362 Go[29535:207] * Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: "*
-[GoAppDelegate goToGlassRepairs]: нераспознанный селектор отправлен в экземпляр 0x3b26620'