有没有办法在不创建新实例的情况下访问它?因为我想使用:
执行segue[self performSegueWithIdentifier:@"loginSegue" sender:sender];
但是,如果我尝试创建一个实例,编译器会说segue不存在。我必须创建一个新实例的原因是因为我从另一个类调用ViewController类的方法。有没有办法从首先创建的实例运行该方法?
答案 0 :(得分:2)
您是否使用UIViewController
方法创建了[UIStoryboard instantiateViewControllerWithIdentifier:]
个实例?如果使用alloc-init进行实例化,它将不会从storyboard实例化实例,因此它不会连接到segue。
这是对UIStoryboard类的引用。
答案 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等)。