0

NSURLConnection を使用してサーバーからデータを取得し、デリゲートに送り返すクラス ApiClient があります

ApiClient で何らかの関数を呼び出し、デリゲート メソッドを実装する Fetcher.h という別のクラスがあります。

Fetcher.h executeCall() を呼び出してプロセス全体をトリガーする 3 番目のクラス (View Controller) があります。

    Fetcher *fetcher = [[Fetcher alloc] init];
    [fetcher getData];

View コントローラーで ApiClient コードを直接呼び出すと、正常に動作します。Fetcher クラスから機能しないのはなぜですか? 私は何を間違っていますか?

Fetcher getData 内にこのコードがあります

APIClient* client = [APIClient sharedInstance];
[client setDelegate:self];
[client getData];

前もって感謝します。

4

2 に答える 2

0

これを試して...

@protocol APIClientProtocol <NSObject>
@optional
- (void) handleMessage;
@end

@interface APIClient : NSObject
@property (readwrite, nonatomic, strong) id<APIClientProtocol> delegate;
@end

@implementation APIClient
@synthesize delegate;

- (void) someAPIClientWork 
{

   // Do some client work here

   if ( [self.delegate respondsToSelector:@selector(handleMessage)] )
      [self.delegate performSelector:@selector(handleMessage)];
}

@end

.h の Fetcher

@interface Fetcher : NSObject <APIClientProtocol>
@end

.m の Fetcher

@implementation Fetcher

- (void) someInit 
{
   APIClient *client = [APIClient sharedInstance];
   client.delegate = self;
}

- (void) handleMessage 
{

   // Something in APIClient was called
}

@end
于 2012-05-23T19:10:22.010 に答える
0

ビューコントローラーで作成しているオブジェクトをプロパティなどに割り当てていないFetcherため、割り当てているメソッドの最後に解放される可能性があります。これをビューコントローラーに追加してみてください。

.h

@interface ViewController

@property (strong, nonatomic) Fetcher *myFetcher; //Add this line in your view controller's interface
...

.m

@implementation ViewController

@synthesize myFetcher;
...
Fetcher *fetcher = [[Fetcher alloc] init];
[fetcher getData];
self.myFetcher = fetcher;//Add this line in your code as well
于 2012-05-23T21:00:07.857 に答える