Вход/Регистрация
iOS. Приемы программирования
вернуться

Нахавандипур Вандад

Шрифт:

• selector — селектор, который будет получать уведомление. Этот селектор должен иметь один параметр типа NSNotification;

• name — имя уведомления, которое вы хотите слушать;

• object — объект, который должен прислать вам уведомление. Например, если одноименные уведомления поступают сразу от двух объектов, то вы можете сузить круг интересующих вас уведомлений и слушать только те из них, которые приходят от объекта A, игнорируя при этом приходящие от объекта B.

Если вы больше не хотите получать уведомления, выполните метод экземпляра removeObserver:, относящийся к классу NSNotificationCenter. Это должно делаться лишь при условии, что центр уведомлений удерживает экземпляры объектов-слушателей. Если центр уведомлений продолжает удерживать экземпляр вашего класса после того, как он был высвобожден, могут возникать утечки памяти и ошибки. Поэтому убедитесь в том, что своевременно удаляете объект из списка наблюдателей.

Обсуждение

Вся эта теория станет значительно более понятной, если пояснить на примере. Мы собираемся создать класс Person и добавить к нему два свойства: имя и фамилию. Оба этих свойства будут относиться к типу NSString. Затем в делегате нашего приложения мы собираемся инстанцировать объект типа Person. Но не будем задавать имя и фамилию этой персоны, а отошлем в центр уведомлений само уведомление и его пользовательский словарь. В этом пользовательском словаре уведомления запишем имя и фамилию как элементы типа NSString. В методе инициализации класса Person мы собираемся слушать уведомление, которое приходит от делегата приложения. Затем извлечем имя и фамилию из пользовательского словаря и зададим эти значения для соответствующих свойств объекта-персоны.

Вот заголовочный файл делегата нашего приложения:

#import <UIKit/UIKit.h>

/* Имя уведомления, которое мы собираемся послать */

extern NSString *const kSetPersonInfoNotification;

/* Ключ имени в словаре пользовательской информации уведомления */

extern NSString *const kSetPersonInfoKeyFirstName;

/* Ключ фамилии в словаре пользовательской информации уведомления */

extern NSString *const kSetPersonInfoKeyLastName;

@interface AppDelegate: UIResponder <UIApplicationDelegate>

@property (nonatomic, strong) UIWindow *window;

@end

А вот реализация делегата нашего приложения:

#import «AppDelegate.h»

#import «Person.h»

NSString *const kSetPersonInfoNotification = @"SetPersonInfoNotification";

NSString *const kSetPersonInfoKeyFirstName = @"firstName";

NSString *const kSetPersonInfoKeyLastName = @"lastName";

@implementation AppDelegate

— (BOOL) application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

Person *steveJobs = [[Person alloc] init];

NSNotification *notification =

[NSNotification

notificationWithName: kSetPersonInfoNotification

object: self

userInfo:@{kSetPersonInfoKeyFirstName: @"Steve",

kSetPersonInfoKeyLastName: @"Jobs"}];

/* В настоящее время класс person слушает это уведомление. Этот класс

извлечет из уведомления информацию об имени и фамилии и задаст

собственные имя и фамилию, основываясь на информации, полученной

из пользовательского словаря уведомления. */

[[NSNotificationCenter defaultCenter] postNotification: notification];

/* Вот доказательство */

NSLog(@"Person's first name = %@", steveJobs.firstName);

NSLog(@"Person's last name = %@", steveJobs.lastName);

self.window = [[UIWindow alloc]

initWithFrame: [[UIScreen mainScreen] bounds]];

self.window.backgroundColor = [UIColor whiteColor];

[self.window makeKeyAndVisible];

return YES;

}

Важнее всего в данном случае будет реализация класса Person (Person.m):

#import «Person.h»

#import «AppDelegate.h»

@implementation Person

— (void) handleSetPersonInfoNotification:(NSNotification *)paramNotification{

  • Читать дальше
  • 1
  • ...
  • 254
  • 255
  • 256
  • 257
  • 258
  • 259
  • 260
  • 261
  • 262
  • 263
  • 264
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: