나는 내 UIPickerView가 계산 작업에 의해 "굶어 죽었다"는 상황이 있습니다. 즉, UIPickerView는 결코 업데이트되지 않으며 따라서 메시지를 보내지 않습니다. 매우 무거운 컴퓨팅 작업이 일어나기 때문입니다. 피커는 계산의 양상을 제어하므로 두 개가 훌륭하게 작동해야합니다.UIPickerView "선점"메시지?
계산을 별도의 스레드에서 실행하려고 생각했습니다. 피커를 자유롭게 업데이트 할 수있는 것처럼 보입니다. 그러나, 그것은 내 계산을 다중 스레드 가능하게 만드는 방대한 사업 일 것이므로 다른 해결책을 찾고 싶습니다.
피커 (또는 다른 UI 컨트롤)가 코드 블록의 실행을 "선점"할 수 있습니까? 계산이 반복됩니다. iterations의 숫자가 무거운 무엇입니까. 픽커가 어딘가에 플래그를 설정할 수도있는 경우 루프가 중단되어 프로그램의 흐름과 함께 작동 할 수 있습니다.
루프가 피커를 폴링 할 수 있으면 루프도 작동합니다. 그러나 나는 그렇게 할 수있는 방법을 찾지 못했습니다.
아이디어가 있으십니까?
는 (. PS는 어제 비슷한 질문을 게시하지만, 정말 제대로 요구하지 않았다! - 확실히 문제가 그 시간에 무엇을 알고하지 않았다)
그건 좋은 생각이지만, 문제는 피커 didSelectRow 대리인 (유일한 동작 메시지 인 것 같습니다)이 결코 호출되지 않는다는 것입니다. 기본적으로 피커는 사이클을 위해 굶어 죽어 가고 있습니다. 나는 그것이 어떻게 일어날 지 이해하지 못한다. 나는 픽커를 업데이트하는 타이머 (또는 그것이 무엇이든간에)가 메시지를 큐에 넣을 것이라고 생각한다. 따라서 늦게 업데이트 될 수 있지만 결국 업데이트 될 수 있습니다. 꽤 이해가되지 않습니다 ... –
델리게이트를 설정 했습니까? 델리게이트를 클래스에 설정했는데 다른 객체에 의해 재설정되지 않았습니까? 주 스레드에서 많은 작업을 수행하더라도 어느 시점에서 대리자 메서드를 가져와야합니다. –
네, 대리인이 작동합니다 - 방금 늦었습니다. 계산에 관한 어떤 것에서는 그것을 지연시키는 것뿐입니다. 테스트로서, 버튼을 만들어 동일한 슈퍼 뷰에 배치했습니다. 버튼의 메시지가 계산을 방해 할 수 있습니다. 그리고 버튼의 메시지가 처리 된 후 피커가 업데이트됩니다. 피커 (picker)를 특별히 지연시킬만한 것을 생각해 낼 수 있습니까? –