Я хочу обновить UILabel, нажав кнопку перезагрузки.Кроме того, я хочу обновить метку в фоновом режиме, потому что она загружает новые данные через XML с моего сайта.Конечно, было бы неплохо автоматически обновить метку при открытии приложения.И есть моя проблема:
Мне удалось заставить его работать хорошо, когда пользователь нажимал кнопку вручную.Но я не понимаю, как сделать то же самое, вызвав мой метод через «applicationDidBecomeActive».Я пытался сделать это таким же образом, но это, очевидно, не работает, потому что мой ярлык возвращается ноль.
Я полагаю, есть проблема моего понимания, и решение должно быть довольно простым.Спасибо за ваш вклад!Примечание: я новичок в Objective-C, и иногда у меня возникают проблемы с «простыми» вещами.; -)
Ниже приведена сводка важных частей кода:
AppDelegate
- (void)applicationDidBecomeActive:(UIApplication *)application {
[[MyViewController alloc] reloadButtonAction];
}
MyViewController
@synthesize label
- (void)reloadButtonAction {
[self performSelectorInBackground:@selector(updateData) withObject:nil];
}
- (void)updateData {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// Parse the XML File and save the data via NSUserDefaults
[[XMLParser alloc] parseXMLFileAtURL];
// Update the labels
[self performSelectorOnMainThread:@selector(updateLabels) withObject:nil waitUntilDone:NO];
[pool release];
}
- (void)updateLabels {
NSUserDefaults *variable = [NSUserDefaults standardUserDefaults];
myLabel.text = [variable stringForKey:@"myLabelText"];
// myLabel is nil when calling all of this via AppDelegate
// so no changes to the myLabel are done in that case
// but: it works perfectly when called via button selector (see below)
NSLog(@"%@",myLabel.text);
}
-(void)viewDidLoad {
// Reload button in the center
UIButton *reloadButton = [UIButton buttonWithType:UIBarButtonSystemItemRefresh];
reloadButton.frame = CGRectMake(145,75,30,30);
[reloadButton setTitle:@"" forState:UIControlStateNormal];
[reloadButton addTarget:self action:@selector(reloadButtonAction) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:reloadButton];
}