NSNotification
Объекты NSNotification инкапсулируют информацию так, чтобы она могла быть широковещательно передана к другим объектам объектом NSNotificationCenter. Объект NSNotification (называемый уведомлением) содержит имя, объект и дополнительный словарь. Имя является тегом, идентифицирующим уведомление. Объект является любым объектом, который плакат уведомления хочет отправить наблюдателям того уведомления (обычно, это - объект, отправивший уведомление). Словарь хранит другие связанные объекты, если таковые имеются. Объекты NSNotification являются неизменными объектами.
Можно создать объект уведомления с методами класса notificationWithName:object:
или notificationWithName:object:userInfo:
. Однако Вы обычно не создаете свои собственные уведомления непосредственно. Методы NSNotificationCenter postNotificationName:object:
и postNotificationName:object:userInfo:
позвольте Вам удобно отправлять уведомление, не создавая его сначала.
Объектное сравнение
Объекты уведомления сравнены с помощью равенства указателя для локальных уведомлений. Распределенные строки использования уведомлений как их объекты и те строки сравнены с помощью isEqual:
потому что равенство указателя не целесообразно через границы процесса.
Создание подклассов
Можно разделить на подклассы NSNotification
содержать информацию в дополнение к имени уведомления, объекту и словарю. Эти дополнительные данные должны быть согласованы между notifiers и наблюдателями.
NSNotification является кластером класса без переменных экземпляра. Также, необходимо разделить на подклассы NSNotification
и переопределите примитивные методы name
, object
, и userInfo
. Можно выбрать любой определяемый инициализатор, который Вы любите, но быть уверенным, что Ваш инициализатор не вызывает [super init]
. NSNotification
не предназначен, чтобы быть инстанцированным непосредственно, и init
метод повышает исключение.
Соответствует
-
AnyObject
-
CVarArgType
-
Сопоставимый
-
Hashable
-
NSCoding
-
NSCopying
-
NSObjectProtocol
-
Печатаемый
-
NSCoding
-
NSCopying
-
NSObject
Оператор импорта
Swift
import Foundation
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.0 и позже.
-
Возвращает новый объект уведомления с указанным именем и объект.
Объявление
Swift
convenience init(name
aName
: String, objectanObject
: AnyObject?)Objective C
+ (instancetype)notificationWithName:(NSString *)
aName
object:(id)anObject
Параметры
aName
Имя для нового уведомления. Может не быть
nil
.anObject
Объект для нового уведомления.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
См. также
postNotificationName:object:
(NSNotificationCenter) -
Возвращает объект уведомления с указанным именем, объект и информацию о пользователе.
Объявление
Objective C
+ (instancetype)notificationWithName:(NSString *)
aName
object:(id)anObject
userInfo:(NSDictionary *)userInfo
Параметры
aName
Имя для нового уведомления. Может не быть
nil
.anObject
Объект для нового уведомления.
userInfo
Словарь информации о пользователе для нового уведомления. Может быть
nil
.Оператор импорта
Objective C
@import Foundation;
Доступность
Доступный в OS X v10.0 и позже.
См. также
+ notificationWithName:object:
postNotificationName:object:userInfo:
(NSNotificationCenter) -
init (name:object:userInfo:) - initWithName:object:userInfo:
Определяемый инициализаторИнициализирует уведомление с указанным именем, объектом и информацией о пользователе.
Объявление
Swift
init(name
aName
: String, objectobject
: AnyObject?, userInfouserInfo
: [NSObject : AnyObject]?)Objective C
- (instancetype)initWithName:(NSString *)
aName
object:(id)object
userInfo:(NSDictionary *)userInfo
Параметры
aName
Имя для нового уведомления. Может не быть
nil
.object
Объект для нового уведомления.
userInfo
Словарь информации о пользователе для нового уведомления. Может быть
nil
.Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.6 и позже.
-
Имя уведомления. (только для чтения)
Обсуждение
Обычно Вы используете это свойство для обнаружения, какое уведомление Вы имеете дело с тем, когда Вы получаете уведомление.
Специальные замечания
Имена уведомления могут быть любой строкой. Для предотвращения коллизий имени Вы могли бы хотеть использовать префикс, это является определенным для Вашего приложения.
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
Объект связался с уведомлением. (только для чтения)
Объявление
Swift
var object: AnyObject? { get }
Objective C
@property(readonly, retain) id object
Обсуждение
Это часто - объект, отправивший это уведомление. Это может быть
nil
.Обычно Вы используете этот метод для обнаружения то, что возражает, что уведомление применяется к при получении уведомления.
Например, предположите регистрацию объекта получить сообщение
handlePortDeath:
когда уведомление «PortInvalid» отправляется на центр уведомления и этоhandlePortDeath:
потребности получить доступ к объекту, контролирующему порт, который теперь недопустим.handlePortDeath:
может получить тот объект как показано здесь:- (void)handlePortDeath:(NSNotification *)notification
{
...
[self reclaimResourcesForPort:notification.object];
...
}
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.
-
Словарь информации о пользователе связался с получателем. (только для чтения)
Объявление
Swift
var userInfo: [NSObject : AnyObject]? { get }
Objective C
@property(readonly, copy) NSDictionary *userInfo
Обсуждение
Может быть
nil
.Словарь информации о пользователе хранит любые дополнительные объекты, который возражает, что получение уведомления могло бы использовать.
Например, в Наборе Приложения, объекты NSControl отправляют
NSControlTextDidChangeNotification
каждый раз, когда полевой редактор (объект NSText) изменяет текст в NSControl. Это уведомление обеспечивает объект NSControl как связанный объект уведомления. Для обеспечения доступа к полевому редактору объект NSControl, регистрация уведомления добавляет полевого редактора к словарю информации о пользователе уведомления. Объекты, получающие уведомление, могут получить доступ к полевому редактору и объекту NSControl регистрация уведомления следующим образом:- (void)controlTextDidBeginEditing:(NSNotification *)notification
{
NSText *fieldEditor = [notification.userInfo
objectForKey:@"NSFieldEditor"]; // the field editor
NSControl *postingObject = notification.object; // the object that posted the notification
...
}
Оператор импорта
Objective C
@import Foundation;
Swift
import Foundation
Доступность
Доступный в OS X v10.0 и позже.