2010-06-06 1 views
2

nsxmlparser 대리자의 올바른 디자인으로 고민하고 있습니다.대리인이 자체가 아닌 경우 nsxmlparser의 OO 모델

내 Foos 테이블을 작성하려면 두 가지 유형의 webservice 호출이 필요합니다. 하나는 전체 테이블을위한 것이고 다른 하나는 각 행을위한 것입니다. 그것은 master-query-result-xml이 충분한 정보를 반환하지 않기 때문에 본질적으로 master-query 다음 detail-query입니다. 그래서 각 행에 대한 세부 정보를 쿼리해야합니다. 엄청난 양의 데이터를 다루지 않습니다.

어쨌든 -. 이전에 그냥

NSXMLParser *parser = [[NSXMLParser alloc]init]; 
[parser setDelegate:self]; 
[parser parse]; 

을 사용하고 난에있어 어떤 클래스의 모든 적절한 대리자 메서드를 구현했습니다
를 시도에서는 청결에, 지금은 두 개의 별도의 위임 클래스를 만들었습니다 및 수행 뭔가 같은 : 청소기되는 이외에도
NSXMLParser *xp = [[NSXMLParser alloc]init]; 
MyMasterXMLParserDelegate *masterParserDelegate = [[MyMasterXMLParser]alloc]init]; 
[xp setDelegate:masterParserDelegate]; 
[xp parse]; 

(내 의견으로는, 적어도), 또한 w를 알아 내려고 대부분의 시간을 소비하지 않는 -parser:didStartElement 구현의 각을 의미한다

hich xml이 파싱 중입니다.

그럼 이제 문제의 핵심입니다.

대리인을 나눠주기 전에 위임 메서드, 클래스 개체의 NSMutableArray를 구현 한 주 클래스에 있었는데 -parser:didEndElement이 'end 각 레코드의

이제 델리게이트는 별도의 클래스에 있습니다. 'detail'델리게이트 클래스의 -parser : didEndElement가 생성 된 객체를 호출 클래스에 "반환"하는 방법을 알 수 없습니다. 적어도 깨끗한 OO 방식은 아닙니다. 나는 모든 종류의 불쾌한 클래스 방법으로 그것을 할 수있을 것이라고 확신한다.

질문에 의미가 있습니까? 감사합니다. .

답변

0

질문은 의미가 있습니다 (분할도 마찬가지입니다). 내가 올바르게 이해한다면, [xp parse]을 호출 한 후에 result parser 속성을 detail parser delegate에 추가하고 호출자로부터이 속성을 읽을 수 있습니다.

+0

물론. 많은 감사합니다! – richard