0

こんにちは私はサーバーとデータを交換するWebサービスベースのアプリを持っています。私は自分の仕事をしている専用のクラスを持っているので、メインビューコントローラーは実際には毎回ワーカーを呼び出します。NSURLConnectionDelegateであるため、ワーカー自体は接続がいつ終了したかを認識しています。ただし、作業が完了するたびにメインビューコントローラに通知する必要があります。ワーカーはメインビューコントローラーの代理人であるため、いつ作業を開始する必要があるかを認識しています。私を助けてください。

4

4 に答える 4

2

逆のことをする必要があります。

最初にワーカーオブジェクトをメインビューコントローラーのメンバーとして宣言し(そしてもちろん、それをプロパティにします)、次にメインビューコントローラーから呼び出すだけ[self.worker sendRequstToServer]でリクエストを送信できます。

次に、メインView Controller内で、作業オブジェクトを初期化する場所に、を置くことを忘れないでくださいself = worker.delegate

3番目に、のようなワーカークラスでデリゲートメソッドを宣言し、ワーカーのメソッド-(void)webServiceCallFinished()を呼び出し[self.delegate webServiceCallFinished]ます-connectionDidFinishLoading()-parserDidEndDocument()NSXMLParerを使用してxmlを解析している場合は、このメソッドを呼び出します) 。

最後に、メインビューコントローラーをワーカークラスのデリゲートとして宣言し、を実装し-webServiceCallFinished()ます。

お役に立てれば。

于 2012-06-15T19:21:18.470 に答える
2

あなたは2つの方法でそれを行うことができます:

アプローチ#1:

ユーザーローカル通知。メインクラスで、次の方法でLocalNotificationCenterにオブザーバーを追加します。

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

そして、ジョブが完了したときのワーカークラスで、セレクターを起動するための通知を投稿します。

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

アプローチ#2:

ワーカークラスのプロトコルを作成し、プロトコルにメソッドを追加して、ワーカーでジョブが実行されたときにデリゲートで呼び出すことができます。

WorkerClass.h

//WorkerClass.h

@protocol WorkerDelegate

@interface WorkerClass: NSObject

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

- (void)JobInProcess;
@end


@protocol WorkerDelegate
- (void)MyJobIsDone;
@end

WorkerClass.m

//WorkerClass.m

@implementation WorkerClass
@synthesize delegate = _delegate;

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

MainClass.h

    //MainClass.h
#import WorkerClass.h

@interface MainClass: NSObject <WorkerDelegate>


@end

MainClass.m

//MainClass.m

@implementation MainClass

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

メインのViewControllerで、次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

メインのViewControllerからリッスンできるバックグラウンドワーカーからの通知を送信します

ビューで聞きたいときに次を追加します。

[[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 に答える