0

I'm new to xCode/swift so please forgive my inexperience. I have a ViewController where my viewers can listen to some audio playback. The playback is accessed like this when the player clicks a play button:

@IBAction func buttonClicked(_ sender: RoundButton)
{
    self.clickedButton = sender
    guard let url = sender.url else {
        return
    }

    let player = AVPlayer(url: url)
    
    let controller = AVPlayerViewController()
    controller.player = player
    
    present(controller, animated: true) {
        player.play()
    }

}

I got this code from another StackOverflow question, so I don't completely understand it. My goal is to be able to save the URL and the last played time so that the user can minimize the app, or navigate to a different screen, and then be able to click a "continue listening" button which will pull up another AVPlayer with the last used URL. This "continue listening" AVPlayer will then seek to the last played time.

I know that I need to observe the first AVPlayer somehow, so that when it is paused, stopped, or put in the background, I save the currentTime to a NSUserDefault (I think?). I also need to save the URL, because there are many different URLs that the user could click on.

I tried doing this, and besides not being able to figure out the observation, I also couldn't figure out the type inconsistencies present with NSUserDefault. I tried to retrieve URL NSDefault value as a String after setting it, but when I went to cast the String to a URL using URL(string: lastPlayedURL), xCode complained about "Cannot convert type Data? to expected type String".

My issue with using other StackOverflow questions to solve my problem is that I don't understand where to put the code blocks. Where do I create the observer? Because xCode did not seem happy when I created it inside the body of "buttonClicked".

Thank you for listening to my rambling.

1 Answers1

1

Yes, UserDefaults seem appropriate to store the URL in. Use this method to do that.

To observe the player you need to use an AVPlayerItem. Here's some code that shows that.

About your general issues with Xcode (note the capitalisation) and Swift language, I'm afraid these are things you need to work through yourself by reading/watching tutorials/documentation. Then when you find detailed issues, post your code here and ask.

Good luck and have fun!

meaning-matters
  • 21,929
  • 10
  • 82
  • 142