0

NSObject クラスからサーバーにデータをアップロードしています。データのアップロード時に MBProgressHUD を表示したいのですが、ViewController で MBProgressHUD を表示する方法は知っていますが、NSObject クラスで表示する方法がわかりません。

4

6 に答える 6

2

この種の問題を解決するには、いくつかの方法があります。ブロック、KVO、または通知を使用できますが、最も一般的なのは委任パターンを使用することです。

UIViewControllerプロトコルを作成することから始めて、呼び出しを行うと の間で通信できるようにする必要がありNSObjectます。この通信を作成するために必要ではありませんが、より柔軟なコードを作成するために使用する必要があります。

通常、私は次のようなことをします:

@protocol CommunicationDelegate <NSObject>

@required

-(void)communicationSucceed;

-(void)communicationFailedWithError:(NSError*)anError;

内には、プロトコルに準拠するオブジェクトへNSObjectの参照があります。.h には、次のようなものが必要です。weakCommunicationDelegate

@property(nonatomic, weak) id <CommunicationDelegate> communicationDelegate;

実際に で作業を開始する直前に、次のNSObjectことを行う必要があります。

myObjectThatWillDoSomething.communicationDelegate = self;

この時点で、 と の間に有効な参照がUIViewControllerありますNSObject。UIViewController の .h ファイル内に、これを追加します。

@interface myViewController : UIViewController <CommunicationDelegate>

したがって、プロトコルUIViewControllerに準拠しています。CommunicationDelegate

MBProgressHUDから開始できるようになりUIViewControllerました。NSObject彼の仕事が終わったら、次のいずれかを呼び出すことができます。

[communicationDelegate communicationSucceed];

また

[communicationDelegate communicationFailedWithError:anError]; //anError is used to describe what went wrong

これらのメソッド (の 1 つ) が呼び出されたら、MBProgressHUD. このメソッドは 内で呼び出されることを理解してくださいUIViewController

于 2012-11-02T15:13:03.500 に答える
2
AppDelegate* delegate = [[UIApplication sharedApplication] delegate];
[delegate.window addSubview:HUD];
...
[HUD removeFromSuperview];
于 2012-11-02T15:05:33.323 に答える
0

NSObjectをアップロードすると、ビューが表示されますよね?したがって、そのビューにHUDを表示します。ダウンロードの開始時、終了時、およびエラーが発生した場合にビューに通知するデリゲートを作成する必要がある場合があります。

于 2012-11-02T14:53:26.723 に答える
0

NSNotification Center を使用して Indicator を停止し、View Controller で listen メソッドを使用して NSNotification を宣言します。そして、Webservice ファイルから通知を投稿します。通知センターのリッスン方法のインジケーターを停止します。

このリンクはあなたを助けるでしょう

于 2012-11-02T15:08:58.123 に答える
0

アップローダ オブジェクトでデリゲート プロトコルを作成する

@protocol UploaderThingyDelegate <NSObject>

-(void)stuffStarted;

-(void)stuffEnded;

@end

@interface UploaderThingy : NSObject

@property (weak) id<UploaderThingyDelegate> delegate;

関連する View または ViewController をアップローダーのデリゲートとして設定し、そこで MBProgressHUD の追加/削除をトリガーします。

于 2012-11-02T15:09:02.737 に答える