2010-02-01 6 views
0

뭔가를 디자인하는 가장 좋은 방법을 찾으려고합니다. 나는 아이폰 앱을 쓰고 있는데, 대부분 웹 서비스에 비동기 호출을 사용하고있다. 즉, URLConnection을 설정하고 start를 호출하여 데이터를 사용할 수 있거나 예외가 발생할 때 나를 다시 호출하도록 할 수 있습니다. 이것은 잘 작동하고 나는 물건을 다루는 올바른 방법이라고 생각합니다.NSXmlParser에 다른 대리자 사용

예 :

웹 서비스에서 사람들의 목록을 요청합니다. 결과 목록은 XmlDelegate에 의해 objective-c "Person"객체로 변환 될 Xml Person 요소입니다.

사람을 얻는 함수를 호출 할 때 "PersonReesived : (Person *) p"라는 단일 함수가있는 프로토콜 인 "PersonResultDelegate"를 전달합니다. 그래서 완전한 Person 객체를 얻을 때마다 그 메소드를 호출하면 모든 것이 잘됩니다. 따라서 내 세부보기 (또는 검색 결과보기)는 사용 가능한 요소를 수신합니다.

문제는 하나 이상의 특정 개체를 가져와야 할 때 발생합니다. 내 구체적인 경우에, 나는 첫 사람과 마지막 약속을 잡아야한다. 그래서이 두 개의 단일 Appointment 객체를 얻기 위해 두 번의 API 호출을해야합니다. 각 Appointment 개체는 등록 된 AppointmentResultDelegate에 대한 호출을 가져 오지만, 어느 것이 첫 번째인지 그리고 마지막 것인지 어떻게 알 수 있습니까? 또한 "첫 번째"또는 "마지막"약속이없고 대리인이 절대 호출되지 않을 때 사건을 어떻게 든 처리해야합니다.

이 문제를 처리하는 올바른 방법은 무엇입니까? 대리인의 핸들에 다시 전달되는 초기 요청에 컨텍스트 정보를 추가해야합니까? 초기 통화를 한 사람에게만 의미가있는 불투명 한 데이터 조각? 내 다른 옵션은 무엇입니까?

솔루션 실제로 단지 delegate에 약속과 함께 데이터의 불투명 한 부분을 통과하고 결국 무엇

.

getNextAppointment withDelegate:self withContext:@"next" 
getPrevAppointment withDelegate:self withContext:@"prev" 

대리인이 내가 전달되고 어떤 약속을 알고 호출되는이 방법 : 나는 약속 개체를 요청할 때, 내가 좋아하는 방법이있다.

답변

0

"각 약속 개체는 등록 된 AppointmentResultDelegate에 대한 호출을 가져 오지만, 어떤 것이 첫 번째인지 그리고 마지막 것인지 어떻게 알 수 있습니까?"

이러한 콜백을받는 순서를 살펴보십시오. 또는 해당 XML 데이터의 일부 값을 살펴보십시오. 시퀀스 또는 데이터와 같습니다. 나는 물론 당신의 데이터를 모른다.

+0

좋아, 어쩌면 나는 그저 생각할 것 같아. :-) –

+0

또한 - 그런 약속이없는 경우 사건을 처리해야 할 것입니다. 특정 사람에 대한 이전 약속 없음, 나는 PersonResultDelegate를 nil이라고 부르겠다. 그러나 나는 어느 것이 어느 것인지 알지 못할 것이다. 나는 처음에 전달 된 콜백에 어떤 ID를 추가하는 것이 갈 길이라고 생각하고있다. –