iOS - 应用程序初始ViewController实例

时间:2012-01-05 02:28:14

标签: ios xcode uiviewcontroller instance segue

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

执行segue
[self performSegueWithIdentifier:@"loginSegue" sender:sender];

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

2 个答案:

答案 0 :(得分:2)

您是否使用UIViewController方法创建了[UIStoryboard instantiateViewControllerWithIdentifier:]个实例?如果使用alloc-init进行实例化,它将不会从storyboard实例化实例,因此它不会连接到segue。

这是对UIStoryboard类的引用。

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

答案 1 :(得分: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等)。