NSTimer无法与其他View Controller的标签进行交互?

时间:2011-06-22 05:30:52

标签: objective-c ios4 xcode4 nstimer

我正在使用一个名为RootViewController的主控制器和名为DetailViewController的详细控制器的SplitViewController。在我的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 :(得分:0)

问题是每次触发计时器时都要创建DetailViewController的新实例。这是一个内存泄漏。其次,它不会改变DetailViewController的可见实例。要更改可见实例,必须将其存储在属性或实例变量中。

虽然我不完全确定这会有效但您可以尝试定义这样的countdown方法,

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

这是未经测试的,应该在理论上有效。如果这样做,则不需要另外的实例变量。