このオブジェクトの最初に作成されたインスタンスを静的変数に保存し、それにアクセスする静的メソッドを定義することができます。
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など)を使用します。
私は決してそれを個人的に作成していません。私はあなたのようにストーリーボードを使用しています。作成するインスタンスにアクセスする方法はありますか? –
ありますが、残念ながらそれほど便利ではありません。 UIApplicateDelegate.windowからviewcontroller階層を1つずつトラバースする必要があります。 ApplicationDelegateのself.windowのルートビューコントローラとして設定されているタブバーコントローラの最初の項目にアクセスしている場合、[self.window.rootViewController.viewControllerers objectAtIndex:0]。 – barley
ああ、私はタイトルの最初のviewcontrollerを言ったことを忘れてしまった。最初のviewcontrollerはウィンドウのrootviewcontrollerなので、appDelegate.window.rootViewControllerlerはそうするでしょう。 – barley