2017-05-24 7 views
0

以下のコードは、カメラの許可を求めてビデオを表示しています。関数videoFinishedは、9秒後に呼び出さなければなりません。これは、iphone 5と7 plusでは動作しません。performSelectorがiPhone 5および7 Plusで呼び出されていません

 [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]; 

また、このコードはvideoFinishedメソッドを呼び出すことはありません。

+1

dispatch_afterスニペットを使うのか?あなたは '[self.player play]'が呼ばれていますが 'videoFinished'は呼び出されていませんか? 'videoFinished'のコードを表示できますか? –

+0

iPhone6Sで動作します。 –

+0

[self.player play]は動作しますが、videoFinishedは呼び出されません –

答えて

2

dispatch_sync(dispatch_get_main_queue()すでにメインキューに入っているときにロックします。 dispatch_asyncを使用してください。

そして、それが動作しない場合は代わりにperformSelector:...afterDelay

+0

私はデバッグし、問題はperformselectorであることがわかりました。実行セレクタは遅延の後に関数を呼び出す最良の方法ですか? –

+0

@ThunderKay 'performSelector ...'は既にレガシーです –

関連する問題