2016-07-19 4 views
-1

Я прошел через документ Apple и понял, что у нас должно быть уведомление и наблюдатель в том же потоке, но когда я вижу, что операция парсера с примерами данных в явном потоке Apple передает уведомление из потока, отличного от основного потока, но наблюдатель находится в основном потоке. Я запутался в этом, или мне что-то не хватает.Может ли наблюдатель прослушивать другой поток в NSNotification в iOS?

+0

В APLParseOperation.m есть два уведомления об уведомлениях, на которые вы ссылаетесь? – jp2g

ответ

0

Я предполагаю, что вы ссылаетесь на любой из двух уведомлений в APLParseOperation.m примера Apple ThreadedCoreData.

Соответствующие биты:

Извещение # 1

[[NSNotificationCenter defaultCenter] postNotificationName:APLParseOperation.AddEarthQuakesNotificationName 
                object:self 
               userInfo:@{APLParseOperation.EarthquakeResultsKey: earthquakes}]; 

Наблюдатель это:

// In APLEarthQuakeSource.m 
_addEarthQuakesObserver = [[NSNotificationCenter defaultCenter] addObserverForName:APLParseOperation.AddEarthQuakesNotificationName 
                      object:nil 
                      queue:nil 
                     usingBlock:^(NSNotification *notification) { 
    /** 

Это хорошо из-за параметра nil для queue. Согласно docs, если вы пройдете nil по этому параметру, блок «запускается синхронно по проводной теме». Все хорошо.

Извещение # 2

Следующее уведомление,

- (void)handleEarthquakesError:(NSError *)parseError { 

    assert([NSThread isMainThread]); 
    [[NSNotificationCenter defaultCenter] postNotificationName:APLParseOperation.EarthquakesErrorNotificationName 
                 object:self 
                 userInfo:@{APLParseOperation.EarthquakesMessageErrorKey: parseError}]; 
} 

всегда вызывается на главной теме:

[self performSelectorOnMainThread:@selector(handleEarthquakesError:) withObject:parseError waitUntilDone:NO]; 

«Надеюсь, что это помогает.

+0

Извините за поздний ответ. Я предполагаю, что я не мог связать проходящий параметр nil, будет делать поток потока синхронно на текущем потоке, поэтому имеет смысл, поскольку мы находимся в одном потоке. Я прав? – manismku

+0

@manismku: Да, это все, что нужно. «Рад помочь. Пожалуйста, примите ответ, если вы счастливы. – jp2g

+0

Спасибо. Я принял ваш ответ, но так как я новичок, поэтому оценка не может быть публично представлена. – manismku