Nano Hash - криптовалюты, майнинг, программирование

Метод вызова iphone из другого класса

У меня есть проект с несколькими файлами 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'

09.03.2010

Ответы:


1

Ну, я предполагаю, что [[UIApplication sharedApplication] delegate] не возвращает SwitchViewController, а вместо этого возвращает GoAppDelegate. Вам нужно найти свой SwitchViewController, прежде чем вы сможете вызывать для него методы.

09.03.2010
  • хорошо, даже когда я пытаюсь: switchViewController *s = [[SwitchViewController alloc] init]; [s goToGlassRepair]; это дает мне предупреждения о том, что s может не реагировать на goToGlassRepair 10.03.2010
  • Проверять орфографию? Ваш первый switchViewController не пишется с заглавной буквы, как и остальные. Кроме того, код, который вы разместили, говорит «goToGlassRepairs», но у вас есть «goToGlassRepair». Убедитесь, что заголовочный файл включен, конечно. 10.03.2010

  • 2

    Вы можете создать свойство (например, id switchController) в своем классе MainMenu. Поскольку контроллер представления переключателя обрабатывает выделение MainMenu, он также может установить это свойство для себя, поэтому класс MainMenu будет иметь способ доступа к контроллеру...

    10.03.2010

    3

    наконец-то это заработало:

    что я сделал, так это добавил функцию в делегате приложения, которая вызывала функцию отображения в контроллере switchview. затем я импортировал делегат приложения в свое главное меню и создал функцию, которая вызывала функцию делегата приложения.

    10.03.2010
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..