0

嗨,我有一个基于 Web 服务的应用程序,可以与我们的服务器交换数据。因为我有一个专门的班级来做我的工作,所以主视图控制器实际上每次都会调用工人。工作人员自己知道连接何时完成,因为它是一个 NSURLConnectionDelegate。但是,每当工作完成时,我都需要通知主视图控制器。worker 是主视图控制器的代表,因此它知道何时需要开始工作。请帮我。

4

4 回答 4

2

你应该反过来做。

首先将您的工作对象声明为您的主视图控制器的成员(当然,使其成为一个属性),然后从您的主视图控制器中,您可以调用[self.worker sendRequstToServer]以发送请求。

其次,在你的主视图控制器中,无论你在哪里初始化你的工作对象,不要忘记把self = worker.delegate.

第三,在您的工作人员类中声明一个委托方法,例如-(void)webServiceCallFinished(),并调用[self.delegate webServiceCallFinished]您的工作人员(如果您使用 NSXMLParer 解析 xml -connectionDidFinishLoading(),您可能想要这样做)-parserDidEndDocument()

最后,你想将你的主视图控制器声明为你的工作类的委托并实现-webServiceCallFinished()

希望这可以帮助。

于 2012-06-15T19:21:18.470 回答
2

你可以通过两种方式做到这一点:

方法#1:

用户本地通知。在主类中,通过以下方式将观察者添加到 LocalNotification Center 中。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(jobDone) name:@"WORKERJOBOVER" object:nil];

并且在工作完成后的工人阶级中,发布通知以触发选择器:

[[NSNotificationCenter defaultCenter] postNotificationName:@"WORKERJOBOVER" object:nil];

方法#2:

您可以创建工作人员类的协议并在协议中添加一个方法,当您在工作人员中完成工作时可以在委托上调用该方法。

工人类.h

//WorkerClass.h

@protocol WorkerDelegate

@interface WorkerClass: NSObject

@property (nonatomic, assign) id<WorkerDelegate> delegate

- (void)JobInProcess;
@end


@protocol WorkerDelegate
- (void)MyJobIsDone;
@end

工人阶级.m

//WorkerClass.m

@implementation WorkerClass
@synthesize delegate = _delegate;

- (void)JobInProcess
{
    //When job over this will fire callback method in main class
    [self.delegate MyJobIsDone];
}

主类.h

    //MainClass.h
#import WorkerClass.h

@interface MainClass: NSObject <WorkerDelegate>


@end

主类.m

//MainClass.m

@implementation MainClass

- (void)MyJobIsDone
{
    //Do whatever you like
}
@end
于 2012-06-15T19:56:26.150 回答
1

viewDidLoad:您的主视图控制器中,将其设置为通知观察者[NSNotificationCenter defaultCenter]

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(webServiceContacted:) name:@"webServiceConnectionSuccessful" object:nil];

然后,当您的数据与服务器成功交换后,在网络完成块中发布通知:

[[NSNotificationCenter defaultCenter] postNotificationName:@"webServiceConnectionSuccessful" object:nil];

webServiceContacted:可能看起来像这样:

-(void)webServiceContacted:(NSNotification *)note
{
    //do stuff here
}
于 2012-06-15T19:21:06.747 回答
0

我会从后台工作人员发出通知,您可以从主视图控制器中收听该通知

当您想收听时,在您的视图中添加以下内容。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(operationComplete:) name:@"operationComplete" object:nil];

在您的后台视图中通知事件已完成。

[[NSNotificationCenter defaultCenter] postNotificationName:@"operationComplete" object:nil];

最后别忘了移除观察者 [[NSNotificationCenter defaultCenter] removeObserver:self];

于 2012-06-15T19:28:45.200 回答