iOS - начальный экземпляр приложения ViewController - PullRequest
1 голос
/ 05 января 2012

Есть ли способ получить к нему доступ, не создавая новый экземпляр? Поскольку я хочу выполнить переход, используя:

[self performSegueWithIdentifier:@"loginSegue" sender:sender];

Однако если я попытаюсь создать экземпляр, компилятор скажет, что переход не существует. Причина, по которой я должен создать новый экземпляр, заключается в том, что я вызываю метод класса ViewController из другого класса. Есть ли способ запустить метод из экземпляра, который создается в первую очередь?

Ответы [ 2 ]

2 голосов
/ 05 января 2012

Вы создаете UIViewController экземпляр, используя [UIStoryboard instantiateViewControllerWithIdentifier:] метод? Если вы создаете экземпляр с помощью alloc-init, он не будет создавать экземпляр экземпляра из раскадровки, поэтому он не подключится к переходу.

Вот ссылка на класс UIStoryboard.

http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIStoryboard_Class/Reference/Reference.html

0 голосов
/ 05 января 2012

Вы можете сохранить первый экземпляр этого объекта в статической переменной и определить статический метод для доступа к нему.

static MyViewController *sharedInstance = nil;

@implementation MyViewController

- (id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle
{
  ... init code here ...

  if (!sharedInstance) {
    sharedInstance = self;
  }

  return self;
}

- (id)initWithCoder:(NSCoder *)decoder
{
  ... init code here ...

  if (!sharedInstance) {
    sharedInstance = self;
  }

  return self;
}

+ (MyViewController *)sharedInstance
{
  if (!sharedInstance)
    [[[self alloc] init] autorelease]; // will be retained inside the init method

  return sharedInstance;
}

@end

Затем в любом месте вашего приложения вы можете получить доступ к этой переменной, используя:

[MyViewController sharedInsatnce];

Это не очень часто используемый шаблон, имеющий несколько недостатков (например, он никогда не будет освобожден. Поэтому убедитесь, что он не использует слишком много памяти), но несколько классов в UIKit / Foundation используют его (NSFileManager NSUserDefaults, NSBundle и т. Д.).

...