0

私のアプリでは、サーバーにリクエストを送信しています。リクエストは と呼ばれる他のクラスにrequestClassあり、メイン ビュー クラスから呼び出されています。(私はcocos2dを使用しています)。

私の質問は、requestClass操作が完了したことを (から)メイン クラスにどのように通知するかということです。リクエストを終了すると、そのコールバックは独自の class( requestClass) にあり、NSLog は で実行されrequestClassます。

NSNotificationは正しい方法だとは思わない

requestClass は次のようになります。

[NSURLConnection
     sendAsynchronousRequest:request
     queue:[[NSOperationQueue alloc] init]
     completionHandler:^(NSURLResponse *response,
                         NSData *data,
                         NSError *error)
     {

         if ([data length] >0 && error == nil)
         {
             **// HOW SHOULD I INFORM THE CLASS THAT CALL ME NOW ???**

         }
         else if ([data length] == 0 && error == nil)
         {
             NSLog(@"Nothing ");
         }
         else if (error != nil){
             NSLog(@"Error = %@", error);
         }

     }];
4

1 に答える 1

1

デリゲート プロトコルを作成するには...

接続ファイルが MyRequestClass と呼ばれると仮定します。

MyRequestClass.h で...

@protocol MyRequestClassDelegate <NSObject>

- (void)requestDidFinishWithDictionary:(NSDictionary*)dictionary;

//in reality you would pass the relevant data from the request back to the delegate.

@end

@interface MyRequestClass : NSObject // or whatever it is

@property (nonatomic, weak) id <MyRequestClassDelegate> delegate;

@end

次に MyRequestClass.h で

[NSURLConnection
     sendAsynchronousRequest:request
     queue:[[NSOperationQueue alloc] init]
     completionHandler:^(NSURLResponse *response,
                         NSData *data,
                         NSError *error)
     {

         if ([data length] >0 && error == nil)
         {
             [self.delegate requestDidFinishWithDictionary:someDictionary];

             //you don't know what the delegate is but you know it has this method
             //as it is defined in your protocol.
         }
         else if ([data length] == 0 && error == nil)
         {
             NSLog(@"Nothing ");
         }
         else if (error != nil){
             NSLog(@"Error = %@", error);
         }

     }];

その後、ご希望のクラスに...

SomeOtherClass.h 内

#import "MyRequestClass.h"

@interface SomeOtherClass : UIViewController <MyRequestClassDelegate>

blah...

someOtherClass.m で

MyRequestClass *requestClass = [[MyRequestClass alloc] init];

requestClass.delegate = self;

[requestClass startRequest];

...そしてデリゲート関数も必ず書いてください...

- (void)requestDidFinishWithDictionary:(NSDictionary*)dictionary
{
    //do something with the dictionary that was passed back from the URL request class
}
于 2013-02-05T10:16:07.347 に答える