2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NotificationのObserverを使ってみる(1)

Last updated at Posted at 2017-05-10

NotificationCenterとObserverは便利だなー
と思いメモ書き

1、NSNotificationCenterに取得について

デフォルトに用意されているdefaultCenterというのがあります
以下の書き方で取得できます。

[NSNotificationCenter defaultCenter]

※そもそもNotificationCenterが何かはわからない場合はこちら
Apple - NSNotificationCenter Class Reference
iPhoneアプリ開発の虎の巻 - NSNotificationCenter

2、NSNotificationCenterに登録前準備

通知を受け取った際に動かしたい処理を登録します
ここでは簡単に・・・

ViewController.m
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
}


- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}

/* 通知を送るアクション-----------*/
- (IBAction)buttonTapped:(id)sender {
    
}

/* 動かしたい処理----------------*/
-(void)hello
{
    NSLog(@"Hello");
}
@end

ボタンアクションと動かしたいメソッドの -(void)helloを用意しておきます。

3、通知を「受け取る」処理の登録

NSNotificationCenterにObserverを登録します

ViewController.m
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    /* 通知を「受け取る」処理の登録----------------*/
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(hello)
                                                 name:@"Hello"
                                               object:nil];
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}

/* 通知を送るアクション-----------*/
- (IBAction)buttonTapped:(id)sender {
    
}

/* 動かしたい処理----------------*/
-(void)hello
{
    NSLog(@"Hello");
}

@end

addObserver:対象オブジェクト [viewやcellなどを対象にできるが基本はself]
selector:メソッド [動かしたい処理]
name:通知名 [他の処理で通知された時に着火するためのもの]
object:渡したいもの [データやオブジェクト]

4、通知を「送る」処理の追加

通知を受け取れるようにしたので、次は通知を送る処理です

ViewController.m
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    /* 通知を「受け取る」処理の登録----------------*/
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(hello)
                                                 name:@"Hello"
                                               object:nil];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}

/* 通知を送るアクション-----------*/
- (IBAction)buttonTapped:(id)sender {
    
    /* 通知を送る*/
    [[NSNotificationCenter defaultCenter] postNotificationName:@"Hello"
                                                        object:nil];
}

/* 動かしたい処理----------------*/
-(void)hello
{
    NSLog(@"Hello");
}

@end

動作確認

notification.gif

以上、簡単でしたがこんな感じです。
違う遷移時や別クラスの処理から呼び出したい時は
簡単かつ便利なので使い勝手いいですね。

・・・と忘れてはいけないのが!

通知登録の削除

ViewController.m
#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    /* 通知を「受け取る」処理の登録----------------*/
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(hello)
                                                 name:@"Hello"
                                               object:nil];

}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];

}

/* 通知を送るアクション-----------*/
- (IBAction)buttonTapped:(id)sender {
    [[NSNotificationCenter defaultCenter] postNotificationName:@"Hello"
                                                        object:nil];
}

/* 動かしたい処理----------------*/
-(void)hello
{
    NSLog(@"Hello");
}

/* 登録した通知登録の削除----------------*/
- (void)deallo
{
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

@end

(そもそも実装時によく削除処理を忘れてしまうから、忘れないようにとわざわざ記事を書いていたのに、書いてる途中にも忘れそうになりましわ^^;)

「基本的に通知イベントは登録と解除する処理を一緒に入れないといけません」

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?