Как перезагрузить изображение в UIButton в applicationDidBecomeActive

У меня есть MenuViewController, который загружается при загрузке приложения; это корневой вид UINavigationController.

В представлении у меня есть UIButton с изображением, которое загружается с URL-адреса, а также метка (это изображение, указывающее погоду и текущую температуру).

Все работает нормально, но если я использую приложение на iPhone 4 с многозадачностью, когда нажимается кнопка «Домой», а затем приложение снова открывается, мне нужно изображение UIButton и temp. ярлык для перезагрузки.

Я попытался вызвать это в своем AppDelegate в applicationDidBecomeActive:

[self parseWeatherXML]; //re-parse weather data
[menuViewController reloadWeatherData]; //loads the image/label from the XML

без везения.

Я также попытался освободить menuViewController в applicationWillResign, а затем перераспределить menuViewController в applicationDidBecomeActive, чтобы метод viewDidLoad снова вызывался, оба способа просто привели к сбою моего приложения.

Любая помощь приветствуется!

РЕДАКТИРОВАТЬ Вот мой метод, который вызывается с уведомлением:

- (void)reloadWeather
{
[self parseWeatherXML];
UIImage *img = [UIImage imageWithData: [NSData dataWithContentsOfURL: [NSURL URLWithString:iconURL]]];
if (img != nil) 
{ 
    NSLog(@"setting image");
    [weatherButton setImage:img forState:normal];
    img = nil; 
}
currentTemp = [currentTemp stringByAppendingString:@"°F"];
[tempLabel setText:currentTemp];
tempLabel.adjustsFontSizeToFitWidth = YES;
if([self isIPad])
{
    tempLabel.textAlignment = UITextAlignmentRight;
    [tempLabel setFont: [UIFont systemFontOfSize: 45.0]];
}

currentTemp = nil;
}

person RyanG    schedule 01.03.2011    source источник
comment
Вы можете вставить консольное сообщение здесь.   -  person Robin    schedule 01.03.2011
comment
@robin Я получаю EXE_BAD_ACCESS. Я не понимаю, когда он загружается, но после того, как я нажму домой и несколько раз перезапущу приложение. И ярлык по какой-то причине показывает MenuViewController, когда он должен говорить о температуре.   -  person RyanG    schedule 01.03.2011
comment
вставьте сюда вывод консоли.   -  person Robin    schedule 01.03.2011


Ответы (2)


Я хотел бы, чтобы ваш MenuViewController стал наблюдателем для UIApplicationDidBecomeActiveNotification и выполнял данные parseWeatherXML. Я бы подумал, что вы будете обновлять данные из URL-адреса, поэтому вам нужно будет подождать, пока эти данные вернутся снова. Итак, я бы следовал той же логике, что и вы, когда получаете это уведомление.

UIApplicationDidBecomeActiveNotification

Опубликовано, когда приложение станет активным. Приложение активно, когда оно получает события. Можно сказать, что активное приложение имеет фокус. Он получает фокус после запуска, теряет фокус, когда всплывает окно наложения или когда устройство заблокировано, и получает фокус, когда устройство разблокировано.

Доступность

Доступно в iOS 2.0 и более поздних версиях.

Объявлено

UIApplication.h

person bstahlhood    schedule 01.03.2011
comment
@bstahlhood Я реализовал то, что вы предложили, следующим образом: '[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(reloadWeather) name:@UIApplicationDidBecomeActiveNotification object:nil];' Я поместил это в метод viewDidLoad MenuViewController. Я заставил reloadWeather распечатать журнал, и он работает 1-2 раза (нажимая домой, затем снова открывая), но после 1-2 раз он получает EXE_BAD_ACCESS. Я предполагаю, что reloadWeather вызывается после parseWeatherXML, который вызывается в applicationDidBecomeActive. - person RyanG; 01.03.2011
comment
Я пытался поместить код туда в , но он не работает, извините, это беспорядок, чтобы посмотреть. - person RyanG; 01.03.2011
comment
@bstahlhood Метод уведомления работает отлично; Я сделал так, чтобы изображение и метка не загружали запуск, только при вызове viewDidLoad, который вызывается только при повторном открытии приложения после того, как оно было закрыто один раз. Итак, я знаю, что уведомления работают, но, как я уже сказал, когда я снова открываю приложение с загруженными изображениями, если я пытаюсь закрыть его снова, я получаю EXE_BAD_ACCESS. Есть ли что-то, что я не обрабатываю в appDelegate? Эта ошибка возникает только с кодом уведомлений. - person RyanG; 03.03.2011
comment
@Ryan Garchinsky Рад, что смог помочь :) - person bstahlhood; 03.03.2011
comment
@bstahlhood Я думал, что проблема решена, но это не так. Метод, который я вызываю с помощью уведомления UIApplicationDidBecomeActiveNotification, вызывается, но не обновляет изображение UIButton или UILabel. В методе я сначала анализирую новые данные о погоде, которые я распечатываю в консоли, и она их анализирует; Я также установил изображение UIButton на новое проанализированное изображение и метку на новую проанализированную температуру, но, как я уже сказал, старое изображение/температура все еще остается. - person RyanG; 14.03.2011
comment
@bstahlhood Я отредактировал свой исходный пост с помощью вызываемого метода. Кроме того, изображение и метка устанавливаются правильно при первоначальном запуске приложения, но после этого они никогда не устанавливаются снова, даже если метод вызывается. - person RyanG; 14.03.2011

Пробовали ли вы сохранить изображение и временный файл с помощью plist или чего-то еще, во время приложенияWillResign, а затем во время приложенияDidBecomeActive вы можете перезагрузить изображение и временный файл из сохраненного файла/метки. Просто еще один вариант для изучения.

person Omar    schedule 01.03.2011