2010-01-13 5 views
0

나는 특정 "모델"을 모두 반환하는 웹 서비스를 가지고 있는데, 그 중 "모델"은 모두 목적에 따라 클래스로 정의됩니다. RESTful 메소드를 호출하면 단일 모델 XML 또는 모델 XML 요소 목록이 리턴됩니다.아이폰에서 XML 구문 분석을위한 패턴

<widget> 
    <a>foo</a> 
</widget> 

또는

<widgets> 
<widget> 
    <a>foo</a> 
</widget> 
    .... 
<widget> 
    <a>foo</a> 
</widget> 
</widgets> 

나는 개체의 개체 또는 목록을 구문 분석하는 방식으로 내 수업을 구성 할 수있는 방법을 마련하기 위해 노력하고있어 쉽고 궁극적으로 모델 객체를 더 추가입니다 쉬운. 그것은 분명히 각 "모델"에 대한 대의원을 포함 할 것입니다. 그러나 그것을 어떻게 쉽고 우아하게 만들 수 있을까요? 각 모델 객체의 xml 대리자? 목록을 처리하는 방법? 아마도 일부 목록에 따라 올바른 개별 모델 대리인을 참조하는 일부 유형의 대리인 객체가 있을까요? (예 : 위젯 -> 위젯 위임자)

웹 서비스의 모든 메소드를 제공하는 단일 클래스가 있습니다.

- (Widget *)getWidgetById: (int) id; 
- (some array) getWidgets:; 

나는 그 때 OO 디자인 패턴의 문제가 더 많이 있다고 생각합니다.

답변

1

내가 당신이라면 서버를 JSON 또는 PLIST 중 하나를 반환하는 것이 좋습니다.

두 가지 형식의 이점은 XML보다 개방형 적이기 때문에 자연스럽게 배열, 사전 및 자연스럽게 개체 속성으로 매핑되고 구문 분석하기 쉬운 다양한 형식의 요소로 자연스럽게 구조화된다는 것입니다. JSON의 경우 TouchJSON과 같은 라이브러리가 필요합니다. plists에는 내장 구문 분석을 사용할 수 있습니다). 또한 무언가를 요소로 만들지, 속성으로 만들지는 신경 쓰지 않습니다.

기본적으로 수식은 다음과 같습니다. 서버에서 응답을 받으면 데이터를 NSDictionary 또는 NSArray (일반적으로 NSDictionaries의 배열)로 변환 한 다음 데이터 모델에서 해당 특성을 끌어와 데이터 모델로 가져옵니다.

+0

제안 해 주셔서 감사합니다. 파서를 가지고 일을 많이하는 것처럼 보입니다. 나는 이것을 조사 할 것이다. 좋은 점은 HTTP Accepts 헤더를 사용하여 두 형식을 모두 반환 할 수 있어야한다는 것입니다. 그만한 가치가 있습니다. –

관련 문제