2017-05-24 3 views
0

Der folgende Code fragt nach der Kameraerlaubnis und zeigt ein Video an. Die Funktion videoFinished muss nach 9 Sekunden aufgerufen werden. Dies funktioniert nicht in iPhone 5 und 7 plus.performSelector wird nicht in iPhone 5 und 7 Plus aufgerufen

 [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted){ 
     if(granted) 
     { 
      dispatch_sync(dispatch_get_main_queue(), ^{ 
       [self.player play]; 
       [self performSelector:@selector(videoFinished) withObject:nil afterDelay:9]; 
      }); 

     } 
     else 
     { 
      dispatch_sync(dispatch_get_main_queue(), ^{ 
       [self noPermission]; 
      }); 
     } 

EDIT

   [self.player play]; 
       [self performSelector:@selector(videoFinished) withObject:nil afterDelay:9]; 

Dieser Code auch nicht nennen die videoFinished Methode.

+1

Wo geht das? Willst du damit sagen, dass '[self.player play]' aufgerufen wird, aber 'videoFinished' nicht? Kannst du uns den Code für 'videoFinished' zeigen? –

+0

Es funktioniert in iPhone6S. –

+0

[self.player play] funktioniert aber videoFinished heißt nicht –

Antwort

2

dispatch_sync(dispatch_get_main_queue() Wenn Sie bereits in der Hauptwarteschlange sind, wird sie gesperrt. Verwenden Sie dispatch_async.

Und verwenden dispatch_after Snippet statt performSelector:...afterDelay

+0

Ich habe debugged und ich habe festgestellt, dass das Problem mit performselector ist. Ist der Wahlschalter der beste Weg, eine Funktion nach einer Verzögerung aufzurufen oder nicht? –

+0

@ThunderKay 'performSelector ...' ist schon Vermächtnis –

Verwandte Themen