NSTimer не может взаимодействовать с меткой другого View Controller? - PullRequest
0 голосов
/ 22 июня 2011

Я использую SplitViewController с главным контроллером с именем RootViewController и подробным контроллером с именем DetailViewController.В моем RootViewController у меня есть таймер внутри моего интерфейса:

@interface RootViewController : UITableViewController <UISplitViewControllerDelegate> {
    UISplitViewController *splitViewController;     
    UIPopoverController *popoverController;
    UIBarButtonItem *rootPopoverButtonItem;

    NSTimer *counter;
}

Когда пользователь выбирает строку из таблицы из RootViewController, счетчик устанавливается так:

counter = [NSTimer scheduledTimerWithTimeInterval:(1.0/1.0) target:self selector:@selector(countdown) userInfo:nil repeats:YES];

Поэтому метод обратного отсчета называется:

-(void)countdown { 
    DetailViewController *newDetailViewController = [[DetailViewController alloc]init];
    newDetailViewController.countdown_timer.text = @"Text Switched";
}

Код внутри метода работает нормально практически везде, и метка никогда не меняется, независимо от того, какой код помещен в метод обратного отсчета.Почему это не связано с меткой моего DetailViewController?

Спасибо!

1 Ответ

0 голосов
/ 22 июня 2011

Проблема в том, что вы создаете новый экземпляр DetailViewController каждый раз, когда срабатывает таймер. Это утечка памяти для одного. И во-вторых, это не изменяет видимый экземпляр DetailViewController. Чтобы изменить видимый экземпляр, вы должны сохранить его в свойстве или переменной экземпляра.

Хотя я не совсем уверен, что это сработает, вы можете попробовать определить свой countdown метод следующим образом:

-(void)countdown { 
    DetailViewController *detailViewController = [splitViewController.viewControllers objectAtIndex:1];
    detailViewController.countdown_timer.text = @"Text Switched";
}

Это не проверено и должно работать в теории. Если это работает, вам не нужно иметь дополнительную переменную экземпляра.

...