0

我有一个 ApiClient 类,它使用 NSURLConnection 从服务器获取一些数据并将其发送回其委托

我有另一个名为 Fetcher.h 的类,它调用 ApiClient 上的某个函数并在其中实现委托方法。

我有第三个类(视图控制器),它调用 Fetcher.h executeCall() 并触发整个过程。

    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 回答