我的UIViewController
里面有UITableView
。在这个视图控制器中,我想显示一些我从互联网上下载的数据。所以为此,我创建了一个名为OfficesParser
的辅助类,它应该执行以下操作:
ASIHTTPRequest
在我的视图控制器中,我alloc
init
-viewDidLoad
self.officesParser = [[[OfficesParser alloc] init] autorelease]; //officesParser is a retained property
{}}} -viewWillAppear:
[self.officesParser download];
然后在OfficesParser
中,我调用了像开始下载过程的officesParser对象的方法,如下所示:
ASIHTTPRequest
在我的帮助程序类- (void)queueFinished:(ASINetworkQueue *)queue {
NSArray *offices = [self offices];
OfficesViewController *ovc = [[OfficesViewController alloc] init];
[ovc setOffices:offices];
}
{{1}}中有一个委托方法,可以告诉您队列何时完成下载。所以从这个方法我想将数据发送到我的视图控制器。我认为这会奏效,但事实并非如此:
{{1}}
考虑到这些代码,您将如何实现我正在尝试使用正确的代码?
答案 0 :(得分:3)
您需要查看delegates and protocols。它们正是您正在寻找的,因为它们让课程无需持久引用即可进行通信。 Here是对他们的另一种解释。
答案 1 :(得分:0)
您的代码:
OfficesViewController *ovc = [[OfficesViewController alloc] init];
创建OfficesViewController
的新实例属性。由于它是一个新实例,因此它与下载和解析过程后触发的OfficesViewController
没有连接。为了能够通信b / w OfficesViewController
和OfficesParser
,为OfficesParser
创建一个修改后的init方法,允许周指针指向OfficesViewController
。
@interface OfficesParser ()
@property(nonatomic,assign)OfficesViewController *ovc;
@end
@implementation OfficesParser
@synthesize ovc;
-(id)initWithDelegate:(OfficesViewController*)delegate{
ovc = delegate;
return [self init];
}
现在您可以访问ovc委托了。
- (void)queueFinished:(ASINetworkQueue *)queue {
NSArray *offices = [self offices];
[ovc setOffices:offices];
}
最后像那样创建你的OfficesParser
self.officesParser = [[OfficesParser alloc] initWithDelegate: self];