オブジェクトの独自のデリゲートを作成していますが、いくつかの問題が見つかりました...デリゲートが呼び出されたときに、オブジェクト Client がメモリに存在しません。
Client Object を UIViewController のプロパティのように宣言すれば問題は解決しますが、良い解決策ではないと思います。
オブジェクトがメモリにないのはなぜですか?
UPDATED コード例:
//Class UIViewController
-(void)viewDidLoad {
[super viewDidLoad];
Client *client = [[Client alloc] initWithDelegate:self];
[client login]; //It has two delegates methods (start and finish)
}
//In the same class, the delegate methods:
- (void) start
{
//DO START STUFF
}
-(void) finish
{
// DO FINISH STUFF
}
Client.h
@interface Client : NSObject <IClient>
@property (nonatomic,assign) id<IClient> _delegate;
-(void)login;
-(id)initWithDelegate:(id<IClient>)delegate;
@end
Client.m
@implementation Client
@synthesize _delegate;
//Constructor
- (id) initWithDelegate:(id)delegate
{
self = [super init];
if(self)
{
self._delegate = delegate;
}
return self;
}
-(void)login
{
//Do stuff asynchronously like NSURLConnection
//Not all code, just a part:
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request
delegate:self
startImmediately:NO];
[connection start];
}
//Delegate method of NSURLConnection that login method fires
//Just implemented one method delegate of NSURLCOnnection for the example
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
NSLog(@"ERROR");
[_delegate stop]; //<---CRASH!!!
}
@end
IClient.h
@protocol IClient <NSObject>
- (void) start;
- (void) finish;
@end
を使用するNSURLConnection
と、デリゲート メソッドは param the own のように渡されますが、次のNSURLConnection
ようにデリゲートをどのように実装する必要があるかわかりません。
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response