2016-02-06 5 views
0

У меня есть простое приложение, в котором 2 mp4 играют в цикл. Как только mp4 заканчивается, приложение выходит из строя, и я получаю эту ошибку:завершение с неперехваченным исключением типа NSException error

"terminating with uncaught exception of type NSException"

Вот мой код. Что означает ошибка и как я могу ее исправить?

let videoURL: NSURL = NSBundle.mainBundle().URLForResource(instrumentaimp4[skaicius], withExtension: "mp4")! 
    let sakeleURL: NSURL = NSBundle.mainBundle().URLForResource("sakele_blikas", withExtension: "mp4")! 


    player = AVPlayer(URL: videoURL) 
    player?.actionAtItemEnd = .None 
    player?.muted = true 

    player2 = AVPlayer(URL: sakeleURL) 
    player2?.actionAtItemEnd = .None 
    player2?.muted = true 

    let playerLayer = AVPlayerLayer(player: player) 
    playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill 
    playerLayer.zPosition = -1 

    let playerLayer2 = AVPlayerLayer(player: player2) 
    playerLayer2.videoGravity = AVLayerVideoGravityResizeAspectFill 
    playerLayer2.zPosition = -1 



    playerLayer.frame = CGRect(x: 50.0, y: 100.0, width: 240.0, height: 433.0) 
    playerLayer2.frame = CGRect(x:647.0, y: 90.0, width: 115.0, height: 44.0) 

    view.layer.addSublayer(playerLayer) 
    view.layer.addSublayer(playerLayer2) 
    player?.play() 
    player2?.play() 

    //loop video 
    NSNotificationCenter.defaultCenter().addObserver(self, 
     selector: "loopVideo", 
     name: AVPlayerItemDidPlayToEndTimeNotification, 
     object:nil) 




} 


func loopVideo(notification: NSNotification) { 

    if let finishedPlayer = notification.object as! AVPlayer! 
    { 
     if finishedPlayer == self.player2 
     { 
      self.player2?.seekToTime(kCMTimeZero) 
      self.player2?.play() 
     } else { 
      self.player?.seekToTime(kCMTimeZero) 
      self.player?.play() 
     } 
    } 
} 
 
2016-02-06 19:33:41.874 Lietava 2[1214:107001] -[Lietava_2.display loopVideo]: unrecognized selector sent to instance 0x79a44b60 
2016-02-06 19:33:41.879 Lietava 2[1214:107001] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Lietava_2.display loopVideo]: unrecognized selector sent to instance 0x79a44b60' 
*** First throw call stack: 
(
    0 CoreFoundation      0x00582a14 __exceptionPreprocess + 180 
    1 libobjc.A.dylib      0x02735e02 objc_exception_throw + 50 
    2 CoreFoundation      0x0058bd63 -[NSObject(NSObject) doesNotRecognizeSelector:] + 275 
    3 CoreFoundation      0x004c96bd ___forwarding___ + 1037 
    4 CoreFoundation      0x004c928e _CF_forwarding_prep_0 + 14 
    5 Foundation       0x00adaa76 __57-[NSNotificationCenter addObserver:selector:name:object:]_block_invoke_2 + 40 
    6 CoreFoundation      0x0054a5f4 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ + 20 
    7 CoreFoundation      0x0054a2aa _CFXRegistrationPost + 458 
    8 CoreFoundation      0x00549ff6 ___CFXNotificationPost_block_invoke + 54 
    9 CoreFoundation      0x005963d3 -[_CFXNotificationRegistrar find:object:observer:enumerator:] + 1795 
    10 CoreFoundation      0x00430667 _CFXNotificationPost + 599 
    11 Foundation       0x00a14b87 -[NSNotificationCenter postNotification:] + 131 
    12 AVFoundation      0x001dec85 __avplayeritem_fpItemNotificationCallback_block_invoke + 6034 
    13 libdispatch.dylib     0x03178377 _dispatch_call_block_and_release + 15 
    14 libdispatch.dylib     0x0319b9cd _dispatch_client_callout + 14 
    15 libdispatch.dylib     0x03180f90 _dispatch_main_queue_callback_4CF + 910 
    16 CoreFoundation      0x004d3fde __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 14 
    17 CoreFoundation      0x00491cd4 __CFRunLoopRun + 2356 
    18 CoreFoundation      0x004910e6 CFRunLoopRunSpecific + 470 
    19 CoreFoundation      0x00490efb CFRunLoopRunInMode + 123 
    20 GraphicsServices     0x04ce4664 GSEventRunModal + 192 
    21 GraphicsServices     0x04ce44a1 GSEventRun + 104 
    22 UIKit        0x01265bfa UIApplicationMain + 160 
    23 Lietava 2       0x0009ef0c main + 140 
    24 libdyld.dylib      0x031c5a21 start + 1 
) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 
+0

Вы можете публиковать полную ошибку? Это происходит потому, что некоторая функция выбрала исключение, и вы не поймали его с помощью 'try {..} catch {..}' –

+0

добавил код ошибки не уверен, как правильно отформатировать его – snukumas

+0

ok добавил ответ –

ответ

0

К исключением вы написали, изменение этого кода:

NSNotificationCenter.defaultCenter().addObserver(self, 
     selector: "loopVideo:", //added : <--- 
     name: AVPlayerItemDidPlayToEndTimeNotification, 
     object:nil) 

selector с : указывает, что функция должна принимать аргумент.
в вашем случае, центр уведомлений искал метод loopVideo, который не принимает никаких аргументов

+0

Не удалось выполнить значение типа «NSKVONotifying_AVPlayerItem» (0x79ea3240) на «AVPlayer» (0x2723c8). теперь эта ошибка – snukumas

+0

Это значит, что вы неправильно обрабатываете функцию. вы должны направить его в 'AVPlayerItem' вместо' AVPlayer' @snukumas –

+0

, игрок2 никогда не играет, почему бы это было так: – snukumas

Смежные вопросы