Я прошел через документ Apple и понял, что у нас должно быть уведомление и наблюдатель в том же потоке, но когда я вижу, что операция парсера с примерами данных в явном потоке Apple передает уведомление из потока, отличного от основного потока, но наблюдатель находится в основном потоке. Я запутался в этом, или мне что-то не хватает.Может ли наблюдатель прослушивать другой поток в NSNotification в iOS?
ответ
Я предполагаю, что вы ссылаетесь на любой из двух уведомлений в 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];
«Надеюсь, что это помогает.
Извините за поздний ответ. Я предполагаю, что я не мог связать проходящий параметр nil, будет делать поток потока синхронно на текущем потоке, поэтому имеет смысл, поскольку мы находимся в одном потоке. Я прав? – manismku
@manismku: Да, это все, что нужно. «Рад помочь. Пожалуйста, примите ответ, если вы счастливы. – jp2g
Спасибо. Я принял ваш ответ, но так как я новичок, поэтому оценка не может быть публично представлена. – manismku
В APLParseOperation.m есть два уведомления об уведомлениях, на которые вы ссылаетесь? – jp2g