2011-01-19 20 views
0

ユーザーが自分のアプリに戻るたびに、自分のクラスの1つで「リフレッシュメソッド」を呼び出す必要があります(マルチタスク)。マルチタスクのためには、私はアプリケーションデリゲートを通してこれを行う必要があるようです。だから私のクラスの "リフレッシュメソッド"を呼び出す最良の方法は何ですか、しかし、アプリケーションの代理人から?デリゲートを介してクラスのメソッドを呼び出す方法(マルチタスクメソッド)?

答えて

2

Vinで説明したように、applicationWillEnterForegroundメソッドで追加できます。 UIを更新するには、アプリケーションデリゲートにビューコントローラへの参照を設定し、そこからupdateメソッドを呼び出します。また、NSNotificationCenterを使用して、他のクラスの更新プログラムに通知することもできます。

アプリケーションデリゲートからビューコントローラへの参照を追加することに決めた場合は、プロパティを作成するだけで済みます。これはそれを行う一つの方法です。ただし、依然としてプロジェクトの構造に依存します。

SampleAppDelegate.h

SampleViewController *viewController; 
... 
@property (nonatomic, retain) SampleViewController *sampleViewController; 
... 

SampleAppDelegate.m

... 
@synthesize sampleViewController; 
... 
// don't forget to release in dealloc 
[sampleViewController release] 

...

あなたのビューコントローラをロードどこその後、アプリデリゲートのsampleViewControllerプロパティの値を割り当てることができます。したがって、たとえば、アプリケーションデリゲートのdidFinishLaunchingWithOptionsメソッドでプログラムを使用してビューコントローラを初期化した場合は、そこに割り当てます。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

    // Override point for customization after application launch. 

    SampleViewController *_sampleViewController = [[SampleViewController alloc] initWithFrame:CGRectMake(0,0,320,480)]; 
    self.sampleViewController = _sampleViewController; 

    [window addSubview:_sampleViewController.view]; 
    [sampleViewController release]; 

    [self.window makeKeyAndVisible]; 
    return YES; 
} 

あなたはアプリケーションデリゲートの外にビューコントローラをロードした場合、あなたはsharedApplicationのデリゲートのプロパティを経由してアプリデリゲートにアクセスする必要があります。

((SampleAppDelegate*)[UIApplication sharedApplication] delegate).sampleViewController = _sampleViewController; 

次に、applicationWillEnterForegroundメソッドからupdateメソッドを呼び出すことができます。

- (void)applicationWillEnterForeground:(UIApplication *)application { 
    /* 
    Called as part of the transition from the background to the active state: here you can undo many of the changes made on entering the background. 
    */ 
    [self.sampleViewController updateMyView]; 
} 
+0

こんにちは、私の質問は、どのように私の更新メソッドを持つビューコントローラへの参照を作成できますか? – cgossain

+0

私は自分の答えを更新しました。 – Gianz

1

applicationWillEnterForegroundは、アプリケーションがフォアグラウンドに近づくときに呼び出されます。そこにあなたのリフレッシュロジックを書いてください。

+0

ですが、ビュー内の特定の要素(テキストなど)を更新する必要があります。この方法で私はそれをすることができますか? – cgossain

+1

アプリケーションがバックグラウンドで実行されている間、NSUserDefaultsに状態情報を保存することができます。その後、アプリケーションが再起動されると、状態情報を取得し、必要なビューに対してsetsNeedDisplayを呼び出して、再度それらを描画することができます。 – Vin

関連する問題