Ich habe eine Klasse für die Verwaltung AVPlayer
und ViewController
zeigt AVPlayer
. In ViewController
habe ich 3 IBOutlets
:Wie übergebe ich IBOutlet zwischen zwei Klassen?
@IBOutlet weak var playButton: UIButton!
@IBOutlet weak var progressBar: UIProgressView!
@IBOutlet weak var timerLabel: UILabel!
Das Problem ist, ich kann nicht herausfinden, wie IBOutlets
von ViewController
auf meine Player Verwaltung Klasse zu übergeben. Ich bekomme immer nil
und
fatal error: unexpectedly found nil while unwrapping an Optional value
wenn progressBar
, timerLabel
oder playButton
initialisiert.
Hier ist ein Code von meiner Player Verwaltung Klasse:
import UIKit
import AVFoundation
class RecordsAudioPlayer: NSObject
{
var player = AVPlayer()
var timerUpdateAudioProgressView = Timer()
var timerUpdateTime = Timer()
var isPlaying: Bool = false
...
func updateAudioProgressView()
{
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "callRecords") as! CallRecordsViewController
let progressBar = vc.progressBar!
print("method fired: updateAudioProgressView ", NSDate.init(timeIntervalSinceNow: 0).description)
if isPlaying
{
let currentPlayerItem = player.currentItem
let duration = Float((currentPlayerItem?.asset.duration.value)!)/Float((currentPlayerItem?.asset.duration.timescale)!)
let currentTime = Float(player.currentTime().value)/Float(player.currentTime().timescale)
progressBar.setProgress(Float(currentTime/duration), animated: false)
}
}
func updateTime()
{
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "callRecords") as! CallRecordsViewController
let timerLabel: UILabel! = vc.timerLabel! //***I get exception here
print("method fired: updateTime ", NSDate.init(timeIntervalSinceNow: 0).description)
let currentTime = Int64(player.currentTime().value)/Int64(player.currentTime().timescale)
let minutes = currentTime/60
let seconds = currentTime - minutes * 60
timerLabel.text = String(format: "%02d : %02d", Int(minutes), Int(seconds))
}
Vielen Dank für Ihre Antwort. Sie haben definitiv nicht das, was ich erwartet habe. Ihre Empfehlungen sind sehr nützlich. Ich werde diese Klasse mit ihnen neu schreiben. Was meinen aktuellen Code betrifft, sollte ich 'vc.loadViewIfNeeded()' in meinen Funktionen oder woanders verwenden? Ich bekomme immer noch die selbe Ausnahme – BadCodeDeveloper