在iPhone中导航到新视图时,iOS 7中的NSTimer未失效

在iPhone中导航到新视图时,iOS 7中的NSTimer未失效,ios,sdk,nstimer,Ios,Sdk,Nstimer,我面临一些与NSTimer相关的问题。我需要在5秒的时间内在底部显示一个ui按钮。我实现了NSTimer功能,并在当时显示了按钮。但是,当我导航到新的视图时。我需要停止该NSTimer或使其无效。我已经在-(void)viewdidegame:(BOOL)animated中完成了这项工作。但是,NSTimer仍在执行。它在任何时候都没有停止。下面是我的代码 - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:anima

我面临一些与
NSTimer
相关的问题。我需要在5秒的时间内在底部显示一个
ui按钮
。我实现了
NSTimer
功能,并在当时显示了按钮。但是,当我导航到新的
视图时
。我需要停止该
NSTimer
或使其无效。我已经在
-(void)viewdidegame:(BOOL)animated
中完成了这项工作。但是,
NSTimer
仍在执行。它在任何时候都没有停止。下面是我的代码

- (void)viewWillAppear:(BOOL)animated {
   [super viewWillAppear:animated];

    self._sizeNowButton = [[UIButton alloc]initWithFrame:CGRectMake(0, self.view.frame.size.height+70, 320, 44)];
    [TLStylesheet useTurquoiseStyleForButton:self._sizeNowButton withText:NSLocalizedString(@"Size Now", nil) withFontSize:BUTTON_BOTTOM_FONT_SIZE];

    [self._sizeNowButton addTarget:self action:@selector(sizeNowClicked) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:self._sizeNowButton];

    SEL tSelector = NSSelectorFromString(@"aTimer");
    self._aTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 target:self selector:tSelector userInfo:nil repeats:NO];
}


-(void)aTimer
{
    self._tTimer = [NSTimer scheduledTimerWithTimeInterval:5.0 target:self selector:@selector(showButton) userInfo:nil repeats:YES];
}

-(void)showButton {

    if([self._sizeNowButton isHidden] )
    {
        self._sizeNowButton.hidden = NO;
        CGRect newFrame = CGRectMake(self._sizeNowButton .frame.origin.x , self._sizeNowButton .frame.origin.y - 44, self._sizeNowButton .frame.size.width, self._sizeNowButton .frame.size.height);
        [UIView animateWithDuration:0.5f
                              delay:0.0
                            options:UIViewAnimationOptionTransitionFlipFromBottom
                         animations:^{
                             [self._sizeNowButton  setFrame:newFrame];
                         }
                         completion:nil];
    }
    else
    {
        CGRect newFrame = CGRectMake(0, self.view.frame.size.height, 320, 44);
        [UIView animateWithDuration:0.5f
                              delay:0.0
                            options:UIViewAnimationOptionCurveLinear
                         animations:^{
                             [self._sizeNowButton  setFrame:newFrame];
                         }
                         completion:nil];

        self._sizeNowButton .hidden = YES;
    }
}

- (void)viewDidDisappear:(BOOL)animated {
   [super viewDidDisappear:animated];
    [self._tTimer invalidate];
    self._tTimer = nil;
    self._sizeNowButton = nil;
}

您正在实例化
self.\u aTimer
但使
self.\u tTimer
无效

当您似乎要触发两个不同的计时器(
\u aTimer
\u tTimer
)时,您需要在
视图中禁用这两个计时器:

if (self._aTimer)
    [self._aTimer invalidate];
self._aTimer = nil;
if (self._tTimer)
    [self._tTimer invalidate];
self._tTimer = nil;
试试这个: 像这样启动计时器

self. _tTimer = [NSTimer timerWithTimeInterval:5.0 target:self selector:@selector(showButton) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self. _tTimer forMode:NSDefaultRunLoopMode];
[self. _tTimer fire];
别这样-

if (self. _tTimer)
{
    [self. _tTimer invalidate];
    self. _tTimer = nil;
}

我将self.u aTimer设置为NO,它只被调用一次,在-(void)aTimer内我们正在测试一个场景。如果场景为false,则调用_tTimer。我已经实现了self。_aTimer在《消失》中仍然被称为。我完全不确定你在这里试图解释什么。不管怎样,去看看是否。。。1. ...<代码>视图将消失:是否调用过?2. ...
self.\u aTimer
在调用
viewwilldemouse:
时实际上不是nil?viewdidemouse:在任何地方调用。我已经设置了断点并进行了测试,它被调用。self.\u aTimer被设置为nil,但不确定它是否为nill。我正在制作NSTimer nil inside ViewDidInviser not inside ViewWillInvise:谢谢您的快速回答。我已经尝试了所有这些方法,但是都不起作用。我认为有一个第三方库使用CFRunLoop,在调试器中显示CFRunLoop会导致NSTimer持续运行。我们可以停止这个CFRunLoop吗?我觉得这个仍然不起作用,NSTimer仍然在运行,我已经签入了整个源代码,我们只在那个特定的类中使用NSTimer。你确定调试器在
viewdidegase
方法中吗?是的,它在viewdidegase中。从早上开始,我已经测试了很多次了。我认为有一个第三方库使用了CFRunLoop,在调试器中,它显示的CFRunLoop导致NSTimer连续运行。我们可以停止这个CFRunLoop吗?你是如何解决这个问题的?