2010-06-17 1 views
0

내 RootViewController.m 파일에 NSXMLParser를 사용하고 있습니다. 나는 또한 나중에 사용하기 위해 RootViewController.m에 정의 사전에 항목을 추가하려면이 방법을 구현하고있어델리게이트로부터 정보를 다시 보내고 있습니다 [iPhone]

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithData:response_data]; 
[xmlParser setDelegate:self]; 
[xmlParser parse]; 
[xmlParser release]; 

그러나

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qualifiedName attributes:(NSDictionary *)attributeDict 

을, 나는 하나 개 이상의 XML 파일을 가져 싶습니다 및 그 노드로 다른 일을하십시오. 위임자로 외부 파일을 사용해야하는 것 같습니다. 내 질문은 :

만약 내가이 다음과 같은 실행 파일 (& 자신의 헤더 파일) :

  • RootViewController.m
  • XMLDelegate1.m
  • XMLDelegate2.m

ith NSXMLParser 대리자를 XMLDelegate i .m으로 설정합니다. 어떻게해야합니까? 그런 다음 NSDictionary를 반환 할 파일을 RootViewController.m에 정의 된 NSDictionary에 추가 할 수 있습니까?

나는 두 가지 답이있다 같아요

  1. 내가 모르는 방법을 사용; 을 달성 그래서 내가 찾은 방법 : 또는
  2. 내가 그것을 2의 의심하지만 1

    감사합니다, 앤디

    UPDATE를 희망

더 나은 워크 플로우를 사용하여 목표, 비록 그것이 가장 좋은 방법이라고 확신하지는 않지만. 기본적으로 필자는 대표자에게 Plist 파일을 업데이트하고 알림 센터를 사용하여 이것이 언제 발생하는지 알아냅니다.

답변

1

Apple의 Event-Driven XML Programming Guide에서이 "문제"에 대한 논의가 꽤 있습니다. "여러 대리인 사용"섹션에서 사용할 전략을 살펴보십시오. 이 문서에는 클래스의 코드 목록이 포함되어 있습니다.이 클래스는 알고리즘의 '현명한'부분입니다. 코드 예에서 작성자는 샘플이 부모, 이름, 특성, 하위 및 파서 속성이있는 Element 클래스 용임을 독자가 알고 있다고 가정합니다. 클래스는 NSXMLParserDelegate 프로토콜을 구현합니다. 또한 클래스는 NSMutableString *content 속성을 포함하며 샘플에 포함되지 않은 메서드 - (void)appendString:(NSString *)aString 메서드에서 업데이트됩니다.

0

아니 코드 예제 응답하지만 패턴 하나, 나는 당신의 질문을 이해한다면 :

당신은 그냥 클래스를 정의 그것의 인스턴스를 만들 파서의 일치하는 인스턴스를하실 경우, 수동의 인스턴스를 설정 파서가 클래스의 인스턴스를 델리게이트로 사용 ... 각 클래스 인스턴스는 DOM을 알려진 전역 배열에 추가 할 수 있습니다.

그건 한 가지 방법입니다. 프로그래밍 방식으로 위임자 (IB를 사용하지 않음)를 설정하면 원하는 것처럼 들릴 수 있습니다.

+0

모든 XML 구문 분석을 처리하는 일종의 XMLController.m 클래스를 만들 때 겪었던 문제는 didStartElement 메서드가 특히 내 RootViewController.m에서 원래 호출이 아닌 것을 반환하지 않는다는 것입니다. 이 주위에? – Andy