0

我目前有 NSXMLParser 在我的视图控制器中工作。我想创建一个新类,它将 2 个数据元素作为属性并执行所有 xmlparsing。我遇到的问题是让新类在完成解析等时“提醒”父级。因此视图控制器(父级)可以关闭活动指示器,然后使用信息更新视图。像

[myParent jobCompleted];

如何引用初始化对象的父级。我可以为该类设置一个自定义通知,以便创建一个观察者来监视它吗?

4

1 回答 1

0

在缺乏更多信息的情况下,我将假设您的实施情况..

所以我猜你有一个代表(它实现了 NSXMLParserDelegate 协议)为你的 NSXMLParser 做所有的解析。对吗?

所以委托协议指定了一个方法,叫做:

- (void)parserDidEndDocument:(NSXMLParser *)parser

如果您在您的委托中实现它,您将知道文档何时被解析。所以现在你需要告诉你的视图控制器这个事件。基本上有两种方法可以做到这一点。要么你在 NSXMLParserDelegate 和你的视图控制器之间建立一个“硬”连接。这基本上是通过为该特定视图控制器指定一个属性并在分配 NSXMLParserDelegate 对象时将该属性设置为指向该视图控制器来完成的。然后您将能够在 parserDidEndDocument 委托方法中向“父级”发送消息

- (void)parserDidEndDocument:(NSXMLParser *)parser{
    [viewcontroller jobCompleted];
}

另一种方法是利用委托模式并指定一个 NSXMLParserDelegateDelegate 协议(或命名其他)。这可能看起来像这样:

@protocol NSXMLParserDelegateDelegate

-(void)parserDidEndDocument:(NSXMLParserDelegate *)parserDelegate;

@end

然后在您的 NSXMLParserDelegate 中创建一个委托属性

@interface NSXMLParserDelegate : NSObject<NSXMLParserDelegate>{
    id<NSXMLParserDelegateDelegate> _delegate;
}
@property (assign) id<NSXMLParserDelegateDelegate> _delegate;

@end

记得在 .m 文件中合成它。

后一种方式会让你失去更多的联系,从而更容易移动东西。

希望它有所帮助..否则让我知道...如果我在这里完全错了,请告诉我=)

于 2009-09-05T07:38:18.780 回答