0

私が取り組んでいるアプリケーションには、いくつかのviewControllerがあり、それぞれがユーザーが実行する単一のテストを表示しています。現時点では、ユーザーはそれぞれを個別に実行できます。ただし、ユーザーが複数のテストまたはすべてのテストを選択できるウィザードのような機能を実装しようとしています。アプリケーションは各テストを繰り返し、各画面をユーザーに提示し、ユーザーが入力を送信すると、アプリケーションは次のテストに順次移行します。すべてのテストが完了すると、ユーザーはメイン画面に戻ります。私が読んだことから、これを行うには NSNotifications が最善の方法ですが、正直なところ、これは初めてで、助けが必要です。ウィザードを開始するメソッドに次の行を含める必要があることに気付きました。

[[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(testChange:)
                                                 name:@"Test"
                                               object:nil];

また、各 viewController の実行が終了したら、次の方法で通知を送信することも知っています。

[[NSNotificationCenter defaultCenter] postNotificationName:@"Test" object:self];

私の質問は、ユーザーがテーブルから選択した 10 個または 20 個の viewController があり、これらの選択が配列に格納されている場合、addObserver メソッドと同じ数の postNotifications を呼び出す必要がありますか? 私がやりたいことは、(ユーザーが選択した) 各 viewController を単純に通過し、ユーザーがその viewController への入力の送信を完了すると、その viewController はメッセージを送信し、ユーザーは次の viewController に移動する必要があります。すべてのテストが終了したら、メイン画面に戻ります。参考までに、各 ViewController の (viewDidLoad) メソッドを呼び出す必要があります。

私の質問が紛らわしい場合は申し訳ありません。

4

1 に答える 1

0

そうです、すべてのView Controllerに通知を受信させたい場合は、すべてのView Controllerに対してaddObserverを呼び出す必要があります。それがどのように行われるかを示すために、小さなコードを作成しました。私はあなたが求めているすべての答えを持っていると思います。試してみてください。

#import "ViewController.h"

@interface Employee:NSObject
@end

@implementation Employee
-(void)testMethod2:(NSNotification *)not{
    NSLog(@"Test method2 is called");
}
@end

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (IBAction)postNotifications:(id)sender {
    Employee *employee = [[Employee alloc] init];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(testMethod:) name:@"Notification" object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(testMethod1:) name:@"Notification" object:nil];
     [[NSNotificationCenter defaultCenter] addObserver:employee selector:@selector(testMethod2:) name:@"Notification" object:nil];
    [[NSNotificationCenter defaultCenter] postNotificationName:@"Notification" object:nil];
}

-(void)testMethod:(NSNotification *)not{
    NSLog(@"Test method is called");
}
-(void)testMethod1:(NSNotification *)not{
    NSLog(@"Test method1 is called");
}
@end
于 2013-01-09T19:30:55.100 に答える