2010-06-17 17 views
0

我在我的RootViewController.m文件中使用NSXMLParser。從代表[iPhone]發回信息

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

我也實施這種方法的條目添加到RootViewController.m定義供以後使用的字典:

- (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,我該怎麼做t那些文件返回一個NSDictionary,我可以添加到RootViewController.m中定義的NSDictionary中?

我想有兩個可能的答案:

  1. 使用,我不知道的方法;或
  2. 使用更好的工作流程

我懷疑這是2,但希望這是1

感謝, 安迪

UPDATE:所以我找到了實現的途徑目標,雖然我不相信這是最好的方式。基本上,我讓我的委託更新Plist文件並使用通知中心來發現這種情況。

回答

1

在蘋果的Event-Driven XML Programming Guide中有一個很好的關於這個「問題」的討論關於「使用多個代表」的部分涉及到使用策略。該文件包括Element類的代碼清單,這是算法的「智能」所在的地方。在代碼示例中,作者假定讀者知道樣本適用於具有parent,name,attribute,children和parser屬性的Element類。 Element類實現了NSXMLParserDelegate協議。 Element類也將具有一個NSMutableString *content屬性,該屬性在未包含在示例中的方法- (void)appendString:(NSString *)aString方法中更新。

0

不是一個代碼示例響應,但一個模式之一,如果我明白你的問題:

你可能可以只定義一個類,使得它的實例,使解析器的匹配情況,然後手動設置的情況下,解析器將該類的實例用作委託...每個這些類實例都可以將其DOM附加到已知的全局數組中。

這是一種方法。以編程方式設置代表(不使用IB)聽起來像你想要的。

+0

我不得不用做某種XMLController.m類的處理所有的XML解析的問題是,didStartElement方法不從我RootViewController.m返回任何東西,尤其不能以原來的呼叫..有一個繞過這個方法? – Andy 2010-06-17 17:54:11