有没有办法在不创建新实例的情况下访问它?因为我想使用以下方法执行 segue:
[self performSegueWithIdentifier:@"loginSegue" sender:sender];
但是,如果我尝试创建一个实例,编译器会说 segue 不存在。我必须创建一个新实例的原因是因为我正在从另一个类调用 ViewController 类的方法。有没有办法从最初创建的实例中运行该方法?
有没有办法在不创建新实例的情况下访问它?因为我想使用以下方法执行 segue:
[self performSegueWithIdentifier:@"loginSegue" sender:sender];
但是,如果我尝试创建一个实例,编译器会说 segue 不存在。我必须创建一个新实例的原因是因为我正在从另一个类调用 ViewController 类的方法。有没有办法从最初创建的实例中运行该方法?
您是否使用方法创建UIViewController
实例[UIStoryboard instantiateViewControllerWithIdentifier:]
?如果你用 alloc-init 实例化,它不会从 storyboard 实例化实例,所以它不会连接到 segue。
这是对 UIStoryboard 类的引用。
您可以将此对象的第一个实例保存到静态变量中,并定义一个静态方法来访问它。
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)。