executeSelectorInBackground, уведомить другой viewcontroller о завершении - PullRequest
5 голосов
/ 20 января 2010

У меня есть метод сохранения изображения, когда пользователь нажимает кнопку Сохранить. Я использую executeSelectorInBackground для сохранения изображения, контроллер вида выталкивается и отображается предыдущий контроллер вида.

Я хочу, чтобы таблица (на предыдущем UIViewController) перезагрузила свои данные после завершения сохранения изображений.

Как я могу это сделать?

Метод сохранения вызывается так:

[self performSelectorInBackground:@selector(saveImage) withObject:nil];
[self.navigationController popViewControllerAnimated:YES];

Ответы [ 3 ]

9 голосов
/ 20 января 2010

В вашем методе saveImage опубликуйте уведомление сразу после завершения сохранения изображения и перед возвращением из метода. Как то так:

// post notification
    [[NSNotificationCenter defaultCenter] postNotificationName:@"ImageSaved" object:nil];

В контроллере, работающем со столом, внедрить

- (void) imageSaved:(NSNotification *)notification{

    [self.tableView reloadData];

}

и в методе viewDidLoad добавьте следующий код для регистрации уведомлений:

[[NSNotificationCenter defaultCenter] addObserver:self
                                selector:@selector(imageSaved:)
                                                 name:@"ImageSaved" object:nil];

наконец, отмените регистрацию в методе dealloc, добавив

[[NSNotificationCenter defaultCenter] removeObserver:self];
2 голосов
/ 20 января 2010

Я думаю, что путь - это вызов метода в конце процедуры saveImage. Может быть, что-то вроде

[self performSelectorInBackground:@selector(saveImage) withObject:previousView];

И если вы хотите сохранить независимость от saveImage, создайте протокол с обратным вызовом, который может использовать ваш предыдущий просмотр.

@protocol processingFinishedDelegate
-(void)processingFinished;
@end

так В конце saveImage у вас будет:

[(id<processingFinishedDelegate>)object processingFinished];

и, конечно, интерфейс вашего предыдущего класса ViewView должен обрабатывать делегат.

0 голосов
/ 22 марта 2010

У меня проблемы с использованием этого для обновления UITextView с предложенным подходом «непрощенный». Я попробовал несколько разных способов, но все не удалось ... Я также попробовал уведомления + наблюдателей с этим, но безуспешно ... Почему это так? Это работает нормально на UILabel, но без UITextView с этим сообщением:

Попытка получить веб-блокировку из потока, отличного от основного потока или веб-потока. Это может быть результатом обращения к UIKit из вторичного потока. Грохнуть сейчас ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...