引用父对象

时间:2009-09-05 02:22:38

标签: objective-c cocoa-touch notifications

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

[myParent jobCompleted];

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

1 个答案:

答案 0 :(得分:0)

由于缺乏更多信息,我将假设有关您实施的事情......

所以我猜你有一个委托(实现NSXMLParserDelegate协议),你的NSXMLParser做了所有的解析..对吗?

因此委托协议指定了一个名为:

的方法
- (void)parserDidEndDocument:(NSXMLParser *)parser

如果您在委托中实现了该功能,您将知道文档何时被解析。所以现在你需要告诉你的viewcontroller这个事件。基本上有两种方法可以做到这一点。要么在NSXMLParserDelegate和viewcontroller之间建立“硬”连接。这基本上是通过为特定的viewcontroller指定属性并在分配NSXMLParserDelegate对象时将该属性设置为指向viewcontroller来完成的。 然后您将能够在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文件中合成它。

后一种做法会让你失去更多的连接,从而更容易移动它。

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