Objective-C - 将数据从NSObject子类发送到UIViewController

时间:2011-08-01 13:48:18

标签: iphone objective-c uiviewcontroller

我的UIViewController里面有UITableView。在这个视图控制器中,我想显示一些我从互联网上下载的数据。所以为此,我创建了一个名为OfficesParser的辅助类,它应该执行以下操作:

  1. 使用ASIHTTPRequest
  2. 从互联网下载数据
  3. 使用JSON解析器处理数据
  4. 完成后,将数据发送回我的视图控制器
  5. 在我的视图控制器中,我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}}

    考虑到这些代码,您将如何实现我正在尝试使用正确的代码?

2 个答案:

答案 0 :(得分:3)

您需要查看delegates and protocols。它们正是您正在寻找的,因为它们让课程无需持久引用即可进行通信。 Here是对他们的另一种解释。

答案 1 :(得分:0)

您的代码:

OfficesViewController *ovc = [[OfficesViewController alloc] init];

创建OfficesViewController的新实例属性。由于它是一个新实例,因此它与下载和解析过程后触发的OfficesViewController没有连接。为了能够通信b / w OfficesViewControllerOfficesParser,为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];