2016-09-26 4 views
0

У меня возникает странная проблема с установкой одной из моих переменных на nil после того, как я установил ее в viewDidLoad.переменная set в viewDidLoad становится nil позже

Я использую VideoPreviewLayer AVPreview, и есть много разных очередей сеансов, поэтому, возможно, я плохо что-то понимаю. Я мог бы использовать диагностику проблемы. Код довольно длинный, но он прост. Любая помощь будет принята с благодарностью. Полный код здесь: https://gist.github.com/makthrow/0570cc571f1c7866e094096626c19498

и короткая версия:

var customRecordButton : RecordButton! 
var progressTimer : Timer! 
var progress : CGFloat! = 0 



override func viewDidLoad() { 
    super.viewDidLoad() 



    // custom recordButton https://github.com/samuelbeek/recordbutton 
    let recordButtonRect = CGRect(x: 0, y: 0, width: 70, height: 70) 
    let customRecordButton = RecordButton(frame: recordButtonRect) 
    customRecordButton.center = self.view.center 
    customRecordButton.progressColor = UIColor.red 
    customRecordButton.closeWhenFinished = false 
    customRecordButton.center.x = self.view.center.x 
    customRecordButton.addTarget(self, action: #selector(self.record), for: .touchDown) 
    customRecordButton.addTarget(self, action: #selector(self.stop), for: UIControlEvents.touchUpInside) 
    self.view.addSubview(customRecordButton) 
    } 
func record() { 
    self.progressTimer = Timer.scheduledTimer(timeInterval: 0.05, target: self, selector: #selector(updateProgress), userInfo: nil, repeats: true) 
} 

func updateProgress() { 


    let maxDuration = CGFloat(5) // max duration of the recordButton 

    progress = progress + (CGFloat(0.05)/maxDuration) 
    customRecordButton.setProgress(progress) // (customRecordButton is always nil here) 

    if progress >= 1 { 
     progressTimer.invalidate() 
    } 

} 

в основном, в UpdateProgress(), customRecordButton всегда ноль

Я пытался идти через код и в viewWillAppear, customRecordButton является но и там. Я не уверен, что это проблема с классом RecordButton, который я использую отсюда: https://github.com/samuelbeek/RecordButton Я не думаю, что должна быть проблема.

Редактировать 1: добавлены переменные выше viewDidLoad. Я их там просто забыл вставить.

редактировать 2: Кстати, кнопка записи появляется на моем телефоне UI, только когда я нажимаю его он говорит мне customRecordButton равна нулю

+0

Try объявить 'пусть customRecordButton = RecordButton()' над 'viewDidLoad ', а затем в' viewDidLoad'set это 'customRecordButton = RecordButton (frame: recordButtonRect)' –

+0

Извините, я должен был добавить это в свой первоначальный ответ. У меня есть переменные, установленные выше viewDidLoad. я отредактировал код – makthrow

+0

Над 'viewdidload' вы имеете' var customRecordButton' и внутри вас 'let customRecordButton', так ли это в вашем коде? Если да, то у вас есть свои проблемы. –

ответ

2
var customRecordButton: RecordButton? 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // custom recordButton https://github.com/samuelbeek/recordbutton 
    let recordButtonRect = CGRect(x: 0, y: 0, width: 70, height: 70) 
    customRecordButton = RecordButton(frame: recordButtonRect) 

... 

customRecordButton?.setProgress(progress) 
+0

жаль, что я должен был добавить это в свой первоначальный ответ. У меня есть переменные, установленные выше viewDidLoad – makthrow

+0

Да, вы объявляете 'customRecordButton' снова в' viewDidLoad' в локальной области. Удалите это 'let' там. – RyuX51

+0

спасибо! я не знаю, как я пропустил это. – makthrow

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