从代表[iPhone]发回信息

时间:2010-06-17 17:21:14

标签: iphone delegates nsxmlparser

我在RootViewController.m文件中使用NSXMLParser。

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,如何让这些文件返回NSDictionary然后我可以添加到NSDictionary在RootViewController.m中定义?

我猜有两种可能的答案:

  1. 使用我不知道的方法;或
  2. 使用更好的工作流程
  3. 我怀疑它是2,但希望它是1。

    谢谢, 安迪

    更新:所以我找到了达到目标的方法,虽然我不相信这是最好的方式。基本上,我让我的代表更新Plist文件并使用通知中心来发现这种情况。

2 个答案:

答案 0 :(得分:1)

在Apple的Event-Driven XML Programming Guide中对这个“问题”进行了很好的讨论。“使用多个代表”一节涉及了一个使用的策略。该文档包括Element类的代码清单,该类是算法的“智能”所在的位置。在代码示例中,作者假定读者知道该示例是针对具有父级,名称,属性,子级和解析器属性的Element类。 Element类实现NSXMLParserDelegate协议。 Element类还将具有NSMutableString *content属性,该属性在方法- (void)appendString:(NSString *)aString方法中更新,该方法未包含在示例中。

答案 1 :(得分:0)

如果我理解你的问题,那么不是代码示例响应而是模式响应:

您可以只定义一个类,创建它的实例,创建解析器的匹配实例,然后手动设置解析器的实例以使用该类的实例作为委托......每个类实例都可以将它的DOM附加到已知的全局数组。

这是一种方式。以编程方式设置代表(不使用IB)听起来像你想要的。