Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Оповещения Objective-C

0

Когда пользователь изменяет на Мас часовой пояс, информация об этом изменении может представлять интерес для многих объектов вашей программы. Каждый такой объект регистрируется в качестве наблюдателя в центре оповещений. При смене часового пояса центру отправляется оповещение NSSystеmТimеZоnеDidСhаngеNоtifiсаtiоn, а он передает его всем наблюдателям, заинтересованным в этом событии.

Внесите изменения в main.m, чтобы зарегистрировать экземпляр Logger для

получений оповещений об изменениях часового пояса:

#import <Foundation/Foundation.h>

#import "Logger.h"

int main (int argc, const char * argv[])

{

@autoreleasepool {

Logger *logger = [[Logger alloc] init]; [[NSNotificationCenter defaultCenter]

addObserver:logger selector:@selector(zoneChange:)

name:NSSystemTimeZoneDidChangeNotification

object:nil];

NSURL *url = [NSURL URLWithString:

@"http://www.gutenberg.org/cache/epub/205/pg205.txt"]; NSURLRequest *request = [NSURLRequest requestWithURL:url];

    unused NSURLConnection *fetchConn

= [[NSURLConnection alloc] initWithRequest:request

delegate:logger startImmediately:YES];

    unused NSTimer *timer

= [NSTimer scheduledTimerWithTimeInterval:2.0 [[NSRunLoop currentRunLoop] run];

}

return 0;

}

Вызываемый метод реализуется Logger.m:

-­‐    (void)zoneChange:(NSNotification   *)note

{

NSLog(@"The system time zone has changed!");

}

Постройте и запустите программу. Во время выполнения откройте раздел системных настроек и измените часовой пояс вашей системы. Вы увидите, что в вашей программе будет вызван метод zoneChange:. (В некоторых системах он вызывается дважды; никаких проблем это не создает.)

Что использовать?

В этой главе были представлены три разновидности обратных вызовов. Как фирма Apple предлагает выбрать наиболее подходящую разновидность в каждой конкретной ситуации?

Объекты,  которые  делают  что-то  одно  (как  NSТimer),  используют  механизм

«приемник/действие».

•  Объекты с более сложной «внутренней жизнью» (как NSURLConnection) используют вспомогательные объекты. Самым распространенным типом вспомогательного объекта является делегат.

•  Объекты, которые должны передавать обратные вызовы нескольким другим объектам (таким, как NSТimeZone), используют оповещения.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

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