iOS 9兼容版本的NSTimer scheduledTimerWithTimeInterval:重复:block:?

问题描述:

我在iOS 10中使用下面的代码,但是当我在iOS 9中运行它时,它崩溃了。我不认为NSTimer scheduledTimerWithTimeInterval:repeats:block:支持iOS 9.我如何实现一个可以在iOS 8-10中工作的计时器?iOS 9兼容版本的NSTimer scheduledTimerWithTimeInterval:重复:block:?

static NSTimer* timer = nil; 

- (void)documentInteractionControllerWillBeginPreview:(UIDocumentInteractionController *)controller 
{ 
    timer = [NSTimer scheduledTimerWithTimeInterval:0.1 repeats:YES block:^(NSTimer * _Nonnull timer) { 
     [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
    }]; 
} 

-(void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller 
{ 
    [timer invalidate]; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
} 
+1

什么崩溃日志说。仅供参考NSTimer一直存在。 – Fogmeister

+2

使用Swift的另一个原因。它本可以拒绝编译,从而避免了崩溃。这是因为Swift _knows_这种方法在iOS 9上不被支持。我很惊讶地听到Objective-C没有赶上。你甚至没有收到警告?惊人。 – matt

您似乎在使用iOS10中引入的功能。再往下,你链接的页面是在iOS的2

https://developer.apple.com/documentation/foundation/nstimer/1408356-timerwithtimeinterval?language=objc

使用,而不是一个功能。

这个固定:

static NSTimer* timer = nil; 

- (void)documentInteractionControllerWillBeginPreview:(UIDocumentInteractionController *)controller 
{ 
    timer = [NSTimer scheduledTimerWithTimeInterval:0.1 target:self selector:@selector(hideStatusBar) userInfo:nil repeats:YES]; 
} 

-(void)hideStatusBar 
{ 
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
} 

-(void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller 
{ 
    [timer invalidate]; 
    [[UIApplication sharedApplication] setStatusBarHidden:YES]; 
}