2010-03-18 1 views
0

내 Rootviewcontroller는 NSURLConnection을 사용하여 서버에서 데이터를 가져온 다음이 데이터를 기반으로 각자 자신의 NSURLConnection을 사용하여 좀 더 구체적인 데이터를 서버에서 가져 오는 더 작은 UIViewController의 묶음 (예 : 7 개)을로드합니다.각각 NSURLConnections를 시작하는 UIViewController를 여러 개로드 할 수 있습니까?

+2

왜 NSURLConnections를 원하는만큼 많이 가질 수 있는지에 대한 이유는 없습니다. 작은 UIViewController가 NSURLConnections를 만들어서 무슨 일이 일어나는지 볼 수있는 코드를 게시 할 수 있습니까? – deanWombourne

답변

2

당신은 정말에만 하나 뷰 컨트롤러가 활성화되어 가정하에 작동합니다 ... 다른 UIViewControllers가 콜백을 결코

- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection 

:하지만, 문제는 단지 RooTViewController로부터 콜백을 잡입니다입니다 그때. 따라서 다른 뷰 컨트롤러가 화면에 보이지 않더라도 작업을 수행하기를 원한다면 모든 네트워크 통신을 수행하는 단일 객체로 로직을 이동해야합니다. viewcontroller 으로 표시되면이 개체에 데이터를 요청하기 만하면됩니다.

iPhone의 경우 비활성보기 컨트롤러가 백그라운드에서 작업을 수행하도록하는 것은 정말 좋지 않은 디자인입니다. 그들이하는 유일한 일은 당신이 현재 인 화면을 보도록하는 것입니다.

0

@ St3fan은 UIViewController의 올바른 패턴에 대해 정확합니다. 많은 개발자가 자신의 UIViewController가 항상 nil이 아닌 뷰를 가지고 있다고 생각합니다. (그렇다고하지 않습니다.) 그렇다고하더라도, 여기서 잘못된 점을 논의 할 것입니다.

UIViewController를 NSURLConnections의 대리자로 설정하지 않았거나 실제로 NSURLConnections를 시작하지 않은 것 같습니다. 후자의 가장 큰 원인은 NIB를 사용하고 있고 필요할 때만 실제로로드 할 때 프로그램의 시작 부분에서 NIB를로드 할 것으로 예상한다는 것입니다.

@deanWombourne 메모에 따르면 원하는 모든 NSURLConnection (**)을 사용할 수 있습니다. 디버거에서 코드를 살펴보십시오. 메일을 nil에 보내지 않았는지 확인하십시오. "아무 일도 일어나지 않을 때"는 거의 항상 여러분이 메시지를 보내지 않는다는 것을 의미합니다.

(**) iPhone의 연결에 정신을 차리지 마십시오. 네트워크 연결은 생성하는 데 비용이 많이 듭니다 (시간과 배터리 모두에서). 단일 연결을 통해 필요한 모든 데이터를 가져올 수 있다면 몇 가지 이점이 있습니다. 이것은 연결을 피하기 위해 뒤로 구부려 야한다는 것을 의미하지는 않습니다. 그들이 조종 할 수 없도록 조심하십시오.