1

有没有办法在不创建新实例的情况下访问它?因为我想使用以下方法执行 segue:

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

但是,如果我尝试创建一个实例,编译器会说 segue 不存在。我必须创建一个新实例的原因是因为我正在从另一个类调用 ViewController 类的方法。有没有办法从最初创建的实例中运行该方法?

4

2 回答 2

2

您是否使用方法创建UIViewController实例[UIStoryboard instantiateViewControllerWithIdentifier:]?如果你用 alloc-init 实例化,它不会从 storyboard 实例化实例,所以它不会连接到 segue。

这是对 UIStoryboard 类的引用。

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

于 2012-01-05T02:44:37.473 回答
0

您可以将此对象的第一个实例保存到静态变量中,并定义一个静态方法来访问它。

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 , ETC)。

于 2012-01-05T02:40:20.687 回答