嗨,我有一个基于 Web 服务的应用程序,可以与我们的服务器交换数据。因为我有一个专门的班级来做我的工作,所以主视图控制器实际上每次都会调用工人。工作人员自己知道连接何时完成,因为它是一个 NSURLConnectionDelegate。但是,每当工作完成时,我都需要通知主视图控制器。worker 是主视图控制器的代表,因此它知道何时需要开始工作。请帮我。
4 回答
你应该反过来做。
首先将您的工作对象声明为您的主视图控制器的成员(当然,使其成为一个属性),然后从您的主视图控制器中,您可以调用[self.worker sendRequstToServer]
以发送请求。
其次,在你的主视图控制器中,无论你在哪里初始化你的工作对象,不要忘记把self = worker.delegate
.
第三,在您的工作人员类中声明一个委托方法,例如-(void)webServiceCallFinished()
,并调用[self.delegate webServiceCallFinished]
您的工作人员(如果您使用 NSXMLParer 解析 xml -connectionDidFinishLoading()
,您可能想要这样做)-parserDidEndDocument()
最后,你想将你的主视图控制器声明为你的工作类的委托并实现-webServiceCallFinished()
。
希望这可以帮助。
你可以通过两种方式做到这一点:
方法#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
在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
}
我会从后台工作人员发出通知,您可以从主视图控制器中收听该通知
当您想收听时,在您的视图中添加以下内容。
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(operationComplete:) name:@"operationComplete" object:nil];
在您的后台视图中通知事件已完成。
[[NSNotificationCenter defaultCenter] postNotificationName:@"operationComplete" object:nil];
最后别忘了移除观察者 [[NSNotificationCenter defaultCenter] removeObserver:self];