1
votes

I have a simple app where 2 mp4 are playing on loop. As soon as the mp4 ends, the app crashes and I get this error:

"terminating with uncaught exception of type NSException"

Here's my code. What does the error mean and how can I fix it?

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) 
1
Can you post the full error? It happens because some function throwed an exception and you didn't catch it with try{..} catch{..}Daniel Krom
added the error code not sure how to format it properlysnukumas

1 Answers

0
votes

By the exception you wrote, change to this code:

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

the selector with : indicates that the function should receive argument.
in your case, the notification center searched for method loopVideo that doesn't take any args