2

の使用方法を示すチュートリアルアプリがありますUINavigationController。ほとんどの場合、アプリは正しく機能します。

メモリ警告をシミュレートすると、一部のデータが失われます。私はに2つUIViewControllerありUINavigationControllerます。UIButtonon firstのビューがありUIViewController、ユーザーがそれに触れるとUIButton、secondUIViewControllerが作成され、firstによってナビゲーションスタックがプッシュされますUIViewController。を介して2番目UIViewControllerから1番目にデータを渡します。UIViewControllerNSNotificationCenter

このアプローチではアプリは正常に動作しますが、2番目UIViewControllerのビューが表示されているときにメモリ警告をシミュレートすると、何も返されません。それで、どうすればその場合に生き残ることができますか。

4

1 に答える 1

0

メモリ警告がトリガーされると、アプリは不要になったすべてのオブジェクトを削除しようとします。これにより、おそらく最初の UIViewController からリスナーが削除されます。

NSNotificationCenter の問題は、リスナーがアクティブかどうかを確認する簡単な方法がないことです。

この状況が NSNotification セットアップの使用に適しているかどうかはわかりません。どのメッセージがどのビューコントローラーに送信されるかを簡単に制御できなくなります。

おそらく、このセットアップの方が簡単です (そしておそらくメモリセーフです)。最初の UIViewController オブジェクトへの参照を保持します

//
//  SecondViewController.h
//  test
//
//

#import <UIKit/UIKit.h>
#import "ViewController.h"

@interface SecondViewController : UIViewController

@property(nonatomic, retain) ViewController *parentViewController;

@end

および .m ファイル

//
//  SecondViewController.m
//  test
//
//

#import "SecondViewController.h"

@interface SecondViewController ()
    -(IBAction)buttonPressed:(id)sender;
@end

@implementation SecondViewController

@synthesize parentViewController;

-(IBAction)buttonPressed:(id)sender {
    parentViewController.yourObject = @"your value";
}

-(void)dealloc {
    [parentViewController release];
    [super dealloc];
}

2 番目のビューコントローラーをプッシュするときは、次のようにします。

SecondViewController *vc = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    vc.parentViewController = self;
    [self.navigationController pushViewController:vc animated:YES];
[vc release];
于 2012-06-18T13:21:42.537 に答える