2014-01-08 2 views
0

나는 다른 객체 B에게 인터넷 데이터를 요청하는 뷰 컨트롤러 객체 A를 가지고있다. 개체 B는 다음을 구현합니다. connectionDidFinishLoading : 연결 :오브젝트 B에서 A로 "말하다"하는 방법은 무엇입니까?

개체 B가 준비되어 있고 데이터가 있으면 위의 메서드가 호출됩니다. 하지만 개체 A의 UI를 업데이트하고 싶습니다.이 작업을 수행하는 가장 좋은 방법은 무엇입니까? 나는 프로토콜을 사용해야한다고 생각하니?

+0

(맞춤식) 대표자는 훌륭한 해결책입니다. 알림도 있습니다. – Larme

답변

2

이 문제를 해결하는 방법에는 여러 가지가 있습니다. 객체 A를 객체 B의 델리게이트로 설정하는 것은 완전히 유효한 방법입니다. 그런 다음 객체 B가 객체 A에 다시 통신하는 데 사용할 프로토콜을 정의합니다.

데이터를 요청하는 호출에서 객체 A에서 객체 B로 완료 블록을 전달하는 또 다른 방법입니다. 그런 다음 객체 B의 connectionDidFinishLoading : connection : 메소드에서 완료 블록이 nil인지 확인하고 nil이 아닌 경우 블록을 호출합니다.

저는 최근 블록 기반 접근 방식을 점점 더 많이 사용하고 있습니다. 설정이 적어지고 완료 코드가 오브젝트 B를 호출하는 오브젝트 A의 메소드에서 올바르므로 진행중인 작업을 더 쉽게 따라 할 수 있습니다.

성공/실패 매개 변수는 물론 NSError 개체를 사용하는 블록을 설정해야 할 수 있습니다. 그렇게하면 연결이 실패하면 정상적으로 처리 할 수 ​​있으며 사용자가 결정하면 오류를 사용자에게보고 할 수도 있습니다.

+1

이 답변을 Upvoting. 완성을 위해 세 번째 방법이 있습니다. NSNotifications. A가 듣고있는 B에서 NSNotification을 시작합니다. – Marco

+0

@Marco, upvote에 감사드립니다. 물론, 다른 방법들도 의심의 여지가 없습니다. 알림은 매우 느슨하게 결합 된 메시징 및 일대 다 메시징에 적합합니다. 대의원과 블록은 실제로 일대일 메시징에만 적합합니다. –

+0

좋아, 내가 일하고있어, 그리고 더 중요한 것은 그것을 이해! 고마워. –

관련 문제