이전보기 컨트롤러로 다시 전환 한 후 내 앱이 작동하지 않는 이상한 동작이 있습니다. 디스플레이 프로필 컨트롤러가 있고 프로필 컨트롤러를 편집합니다. EXC_BREAKPOINT (코드 = 1, 서브 코드 = 0x1026eb43c)DispatchSourceTimer가 segue에서 오류없이 앱을 종료합니다.
I : 나는 오류없이 단지
Thread1 1 초 나중에 응용 프로그램 충돌 내 이전보기 컨트롤러로 돌아가 다음이 오디오 파일을 녹음 녹음하는 동안보기에 카운터를 추가 할 수 있도록
DispatchSourceTimer
를 사용하여 오디오를 녹음하고 난 전역 변수 이런 식으로 초기화 : 여기var nonObservalePropertyUpdateTimes:DispatchSourceTimer = DispatchSource.makeTimerSource(flags: [], queue: DispatchQueue.main)
을 그리고 난라는 Singltone 클래스를 사용하여 녹음을 어떻게210 :
@IBAction func micButtonTapped(_ sender: UIButton) { if recButtonIsChecked { if AudioManager.shared.record(fileName: "recbio") { sender.setBackgroundImage(UIImage(), for: .normal) sender.setImage(#imageLiteral(resourceName: "pauseProfileButton"), for: .normal) playRecordButton.setBackgroundImage(#imageLiteral(resourceName: "editProfilePlay"), for: .normal) recordVoiceLabel.isHidden = true recButtonIsChecked = false secondsLabel.isHidden = false nonObservalePropertyUpdateTimes.resume() } nonObservalePropertyUpdateTimes.setEventHandler {[weak self] in self?.secondsLabel.text = String(describing: AudioManager.shared.countDownTimer) } nonObservalePropertyUpdateTimes.schedule(deadline: DispatchTime.now(), repeating: DispatchTimeInterval.milliseconds(100)) } else { sender.setBackgroundImage(#imageLiteral(resourceName: "editProfileMicButton"), for: .normal) sender.setImage(UIImage(), for: .normal) recButtonIsChecked = true stopRecording() } }
내가 뭘 생각하는 것은 내가 내 편집 프로필보기 컨트롤러에서
그래서 나는이 작업을 수행하려하지만 도움이되지 않습니다nonObservalePropertyUpdateTimes
개체를 제거 할 때 내가 다시 SEGUE 때 응용 프로그램이 충돌하지 않았기 때문에 뭔가 잘못된 해프닝이 충돌의 원인이되는 DispatchQueue에 있다는 것입니다 내 프로필보기 컨트롤러에.override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) nonObservalePropertyUpdateTimes.suspend() nonObservalePropertyUpdateTimes.cancel() }
을 아니면
deinit
이 파견 객체에 대한 방법이있다. 나는 무엇이 잘못되었는지, 무엇을해야 할지를 정말로 모른다. 심지어 적절한 오류 메시지가 없습니다. 메인 쓰레드 내에서 실행
나는 'AudioManager.shared.countDownTimer'를 의심하여 시작할 것입니다. 이 코드에 무엇이 있는지는 명확하지 않습니다. 하지만 그걸 제거하고, 텍스트를'Date()'또는 유사하게 설정함으로써 문제가되는지 탐색 할 수 있습니다. –
countDownTimer는 15로 시작하는 Int 변수이며 AudioManager 클래스의 타이머를 사용하여 1 초마다 카운트 다운합니다. 내가 말했듯이 녹음 부분은 잘 작동하고 모든 것이 괜찮습니다. 문제는 디스패치에 있습니다. 왜냐하면 디스패치없이 레코딩 할 때 "물론 내 라벨이 업데이트되지 않습니다"하지만 내 프로필보기 컨트롤러로 다시 갈 때 충돌이 발생하지 않기 때문입니다. 때문에 DispatchSourceTimer의 인스턴스를 초기화합니다. –
다음으로 'DispatchSourceTimer'를'NSTimer'에 대해 바꿔 넣을 것입니다. 그러면 문제가 'DispatchSource'에 있는지 알려줍니다. –