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)
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