2014-04-23 6 views
0

내 응용 프로그램에서 DB를 만들고 열어서 필요할 때 '상황'을 처리하는 DatabaseManager 클래스가 있습니다. 문제는 openWithCompletionHandler이 비동기 적이기 때문에 openDatabase 호출이 즉시 반환되고 초기 뷰 컨트롤러가 열리지 않고 데이터베이스에서 데이터를 가져 오는 데 충돌이 발생한다는 것입니다.데이터베이스를 올바르게 여는 건가요?

내 솔루션은 초기 VC를 openDatabase 메서드에 전달하고 완료 처리기 코드 블록 내에서 VC로 다시 호출하도록하는 것입니다. 그래서 초기 VC는 기본적으로 DatabaseManager를 호출하여 데이터베이스를 열고 콜백을 얻을 때까지 기다렸다가 디스플레이에 필요한 데이터를 가져옵니다.

잘 작동하며 데이터가 나타날 때 인식 할 수있는 지연이 없습니다.

정상적인 방법입니까? 배심원이 작동하는 것을 조작하는 것보다 최선의 방법을 배우고 싶습니다. 다양한 검색을 시도하고 Apple docs를 읽었으며 대답을 찾을 수 없었습니다. 문서에서 명백한 것을 놓친 경우, 저를 지적하십시오.

감사합니다.

답변

0

"정상적인 방법입니까?" 예. 뭔가 비동기 일 때 당신이하는 일입니다. 비동기식 작업을 수행하는 객체 A는 비동기식 작업이 완료 될 때 데이터를 다시로드해야하는 객체 B가 아니기 때문에 객체 A에 대한 참조를 넘겨줌으로써 훌륭하게 해결했습니다. 예와 다른 대리자를 다시 호출하는 NSURLSession.

+0

감사합니다. 좋은 피드백. –

+0

대단히 환영합니다. 비동기 프로세스가 주요 오브젝트 (클래스 또는 메소드)에 대해 알 필요가없는 경우가있을 수 있습니다. 예를 들어 프로토콜과 진정한 위임 아키텍처를 사용할 수 있습니다. 또는 자체에 대한 참조를 넘겨주는 대신 Objective-C 블록을 넘길 수 있습니다. 그러나 당신이하고있는 것에는 무엇이든지 잘못된 것이 있습니다. – matt

관련 문제