Я пытаюсь передать объект из делегата моего приложения получателю уведомлений в другом классе.
Я хочу передать целое число 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 и передать объект NSDictionary, содержащий целое число messageTotal:
На принимающей стороне вы можете получить доступ к словарю userInfo следующим образом:
источник
messageTotal
значок на UIButton, вы знаете, как я могу обновить кнопку с новым счетчиком значков? Код для отображения изображенияviewDidLoad
являетсяUIBarButtonItem *eRXButton = [BarButtonBadge barButtonWithImage:buttonImage badgeString:@"1" atRight:NO toTarget:self action:@selector(eRXButtonPressed)];
Опираясь на предоставленное решение, я подумал, что было бы полезно показать пример передачи вашего собственного пользовательского объекта данных (который я здесь назвал «сообщением» в соответствии с вопросом).
Класс А (отправитель):
Класс B (приемник):
источник
object
пары вpostNotificationName
должен означает тот , который отправить это уведомление.userInfo
параметра, и принятый ответ выше теперь отредактирован, чтобы показать это.userInfo
словарь в качестве способа передачи данных объекта.Как отметил @Johan Karlsson ... Я делал это неправильно. Вот правильный способ отправки и получения информации с помощью NSNotificationCenter.
Сначала посмотрим на инициализатор postNotificationName:
источник
Мы будем передавать нашу информацию с помощью параметра
userInfo
param.[NSObject : AnyObject]
Тип трюм-над от Objective-C . Итак, в стране Swift все, что нам нужно сделать, это передать словарь Swift, в котором есть ключи, которые являются производными,NSObject
и значения, которые могут бытьAnyObject
.Обладая этими знаниями, мы создаем словарь, который передаем в
object
параметр:Затем мы передаем словарь в параметр нашего объекта.
отправитель
Класс приемника
Сначала нам нужно убедиться, что наш класс наблюдает за уведомлением
Тогда мы можем получить наш словарь:
источник
Swift 5
Бонус (который обязательно стоит сделать!):
Заменить
Notification.Name("SomeNotificationName")
на.someNotificationName
:Заменить
"key0"
и"key1"
наNotification.Key.key0
иNotification.Key.key1
:Почему я обязательно должен это делать? Чтобы избежать дорогостоящих опечаток, переименовывайте, пользуйтесь поиском и т. Д.
источник
'Key' is not a member type of 'Notification'
, Смотрите здесь: https://ibb.co/hDQYbd2Key
тех пор структура была удалена.Пользовательский объект / тип Swift 5.1
источник