1. ホーム
  2. objective-c

[解決済み] NSNotificationCenterでオブジェクトを渡す方法

2022-06-13 19:17:05

質問

アプリのデリゲートから、別のクラスの通知レシーバーにオブジェクトを渡そうとしています。

整数を渡したいのですが messageTotal . 今、私は持っています。

レシーバに

- (void) receiveTestNotification:(NSNotification *) notification
{
    if ([[notification name] isEqualToString:@"TestNotification"])
        NSLog (@"Successfully received the test notification!");
}

- (void)viewDidLoad {
    [super viewDidLoad];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissSheet) name:UIApplicationWillResignActiveNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveTestNotification:) name:@"eRXReceived" object:nil];

通知を行うクラスで

[UIApplication sharedApplication].applicationIconBadgeNumber = messageTotal;
[[NSNotificationCenter defaultCenter] postNotificationName:@"eRXReceived" object:self];

しかし、オブジェクトを渡すには messageTotal を他のクラスへ渡したい。

どのように解決するのですか?

"userInfo" バリアントを使用し、messageTotal 整数を含む NSDictionary オブジェクトを渡す必要があります。

NSDictionary* userInfo = @{@"total": @(messageTotal)};

NSNotificationCenter* nc = [NSNotificationCenter defaultCenter];
[nc postNotificationName:@"eRXReceived" object:self userInfo:userInfo];

受信側では、以下のようにuserInfo辞書にアクセスすることができます。

-(void) receiveTestNotification:(NSNotification*)notification
{
    if ([notification.name isEqualToString:@"TestNotification"])
    {
        NSDictionary* userInfo = notification.userInfo;
        NSNumber* total = (NSNumber*)userInfo[@"total"];
        NSLog (@"Successfully received test notification! %i", total.intValue);
    }
}