我目前有 NSXMLParser 在我的视图控制器中工作。我想创建一个新类,它将 2 个数据元素作为属性并执行所有 xmlparsing。我遇到的问题是让新类在完成解析等时“提醒”父级。因此视图控制器(父级)可以关闭活动指示器,然后使用信息更新视图。像
[myParent jobCompleted];
如何引用初始化对象的父级。我可以为该类设置一个自定义通知,以便创建一个观察者来监视它吗?
我目前有 NSXMLParser 在我的视图控制器中工作。我想创建一个新类,它将 2 个数据元素作为属性并执行所有 xmlparsing。我遇到的问题是让新类在完成解析等时“提醒”父级。因此视图控制器(父级)可以关闭活动指示器,然后使用信息更新视图。像
[myParent jobCompleted];
如何引用初始化对象的父级。我可以为该类设置一个自定义通知,以便创建一个观察者来监视它吗?
在缺乏更多信息的情况下,我将假设您的实施情况..
所以我猜你有一个代表(它实现了 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 文件中合成它。
后一种方式会让你失去更多的联系,从而更容易移动东西。
希望它有所帮助..否则让我知道...如果我在这里完全错了,请告诉我=)