从代表[iPhone]发回信息
我在我的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
和设置i
th NSXMLParser委托为XMLDelegate i
.m,我该怎么做t那些文件返回一个NSDictionary,我可以添加到RootViewController.m中定义的NSDictionary中?
我想有两个可能的答案:
- 使用,我不知道的方法;或
- 使用更好的工作流程
我怀疑这是2,但希望这是1
感谢, 安迪
UPDATE:所以我找到了实现的途径目标,虽然我不相信这是最好的方式。基本上,我让我的委托更新Plist文件并使用通知中心来发现这种情况。
在苹果的Event-Driven XML Programming Guide中有一个很好的关于这个“问题”的讨论关于“使用多个代表”的部分涉及到使用策略。该文件包括Element
类的代码清单,这是算法的“智能”所在的地方。在代码示例中,作者假定读者知道样本适用于具有parent,name,attribute,children和parser属性的Element
类。 Element
类实现了NSXMLParserDelegate
协议。 Element
类也将具有一个NSMutableString *content
属性,该属性在未包含在示例中的方法- (void)appendString:(NSString *)aString
方法中更新。
不是一个代码示例响应,但一个模式之一,如果我明白你的问题:
你可能可以只定义一个类,使得它的实例,使解析器的匹配情况,然后手动设置的情况下,解析器将该类的实例用作委托...每个这些类实例都可以将其DOM附加到已知的全局数组中。
这是一种方法。以编程方式设置代表(不使用IB)听起来像你想要的。
我不得不用做某种XMLController.m类的处理所有的XML解析的问题是,didStartElement方法不从我RootViewController.m返回任何东西,尤其不能以原来的呼叫..有一个绕过这个方法? – Andy 2010-06-17 17:54:11