Странная проблема возникает после того, как запущен метод делегата моей статической библиотеки. в первую очередь, проект имеет субпроект, который является статической библиотекой (xcode 4.6 ios 6.x). Статический lib запускает свои собственные делегаты в соответствии с событием. Приложение реализует метод делегирования статической библиотеки lib. в реализации я использую следующее для доступа к элементам пользовательского интерфейса и запуска других событий. Didgetnotified - это метод делегата lib.Селектор внутри метода делегата триггеры дважды
- (void)didGetNotified
{
dispatch_async(dispatch_get_main_queue(), ^{
[self parseData];
NSNotificationCenter *notifyCenter = [NSNotificationCenter defaultCenter];
[notifyCenter addObserver:self
selector:@selector(updateUI)
name:@"updateUIN"
object:nil];
});
}
-(void) parseData {
//parse data and its ready now and send notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"updateUIN" object:nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:@"updateUIN" object:nil];
}
-(void) updateUI {
//this method gets fired twice mostly
}
проблема в том, что вызов updateUI
вызван дважды. я не могу понять, что я делаю неправильно. это что-то с резьбой? статический делегат lib не находится в основном потоке. но я использую отправку по основному потоку. может кто-нибудь объяснить? благодарю заранее.
Похоже, вы вызываете уведомление «updateUIN», которое будет улавливаться текущим объектом. Это то, что вы хотите? (Что вы пытаетесь сделать с уведомлением «updateUIN», и почему он также подписывается на этот объект?) – bdesham
Если метод дважды запускается из одного уведомления, вы подписываетесь на уведомление дважды. Вы должны подписываться снова в другом месте. @bdesham прав, однако, ваш шаблон здесь нечетный – jackslash
Не регистрируйте это уведомление в методе делегата. – iMash