Опубликовать уведомление с отправителем и объектом

#objective-c #object #notifications #sender

#objective-c #объект #уведомления #отправитель

Вопрос:

Кажется, я не могу понять, как опубликовать уведомление с объектом и отправителем.

Я могу опубликовать уведомление с именем, информацией об отправителе и пользователе. Смотрите:

 - (void)postNotificationName:(NSString *)notificationName
                      object:(id)notificationSender
                    userInfo:(NSDictionary *)userInfo
  

И я могу опубликовать NSNotification с объектом, но не связать с ним отправителя:

 NSNotification *notification = [NSNotification notificationWithName:name
                                                             object:someObject];
[[NSNotificationCenter defaultCenter] postNotification:notification];
  

Кто-нибудь может сказать мне, как опубликовать уведомление с (а) объектом и (б) ссылкой на отправителя?

Ответ №1:

В обоих предлагаемых вами методах object переменная представляет отправителя уведомления, которым может быть все, что вы действительно хотите. Чтобы предоставить дополнительные объекты с уведомлением, вы могли бы передать словарь со своими объектами в userInfo .

 NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                                      someObject, @"someObject",
                                      anotherObject, @"anotherObject", nil];
[[NSNotificationCenter defaultCenter] postNotificationName:name
                                                    object:sender
                                                  userInfo:options];
  

Комментарии:

1. Я думал об этом решении, но мне хотелось бы более общее решение без ключа-значения. Но пока этого хватит. Спасибо

2. Это просто невозможно с помощью NSNotification API. На самом деле это универсальное решение, они позволили предоставить дополнительное количество объектов.

3. Под общим я подразумеваю, что вы должны предоставить ключ для предоставляемого вами объекта. При простом добавлении одного объекта в NSNotification другим классам в вашем проекте не нужно будет знать, какой ключ используется, потому что ни один из них не используется. Но спасибо за ваш ответ.