NSObject クラスからサーバーにデータをアップロードしています。データのアップロード時に MBProgressHUD を表示したいのですが、ViewController で MBProgressHUD を表示する方法は知っていますが、NSObject クラスで表示する方法がわかりません。
6 に答える
この種の問題を解決するには、いくつかの方法があります。ブロック、KVO、または通知を使用できますが、最も一般的なのは委任パターンを使用することです。
UIViewController
プロトコルを作成することから始めて、呼び出しを行うと の間で通信できるようにする必要がありNSObject
ます。この通信を作成するために必要ではありませんが、より柔軟なコードを作成するために使用する必要があります。
通常、私は次のようなことをします:
@protocol CommunicationDelegate <NSObject>
@required
-(void)communicationSucceed;
-(void)communicationFailedWithError:(NSError*)anError;
内には、プロトコルに準拠するオブジェクトへNSObject
の参照があります。.h には、次のようなものが必要です。weak
CommunicationDelegate
@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
。
AppDelegate* delegate = [[UIApplication sharedApplication] delegate];
[delegate.window addSubview:HUD];
...
[HUD removeFromSuperview];
NSObjectをアップロードすると、ビューが表示されますよね?したがって、そのビューにHUDを表示します。ダウンロードの開始時、終了時、およびエラーが発生した場合にビューに通知するデリゲートを作成する必要がある場合があります。
NSNotification Center を使用して Indicator を停止し、View Controller で listen メソッドを使用して NSNotification を宣言します。そして、Webservice ファイルから通知を投稿します。通知センターのリッスン方法のインジケーターを停止します。
このリンクはあなたを助けるでしょう
アップローダ オブジェクトでデリゲート プロトコルを作成する
@protocol UploaderThingyDelegate <NSObject>
-(void)stuffStarted;
-(void)stuffEnded;
@end
@interface UploaderThingy : NSObject
@property (weak) id<UploaderThingyDelegate> delegate;
関連する View または ViewController をアップローダーのデリゲートとして設定し、そこで MBProgressHUD の追加/削除をトリガーします。