問題是並非所有的委託方法都被調用。iOS:委託回調不會被調用
Login.h
#import <Foundation/Foundation.h>
@protocol LTLoginDelegate;
@interface LTLogin : NSObject
@property(nonatomic, weak) id <LTLoginDelegate> delegate;
-(void)commitLogin:(NSString*)login password:(NSString*)password;
-(void)login:(LTLogin*)login didBecomeActive:(BOOL)success;
-(void)login:(LTLogin*)login didFailWithError:(NSError*)error;
-(void)login:(LTLogin*)login didSuccessWithMessage:(NSString*)message;
-(void)storeLoginCredentials;
@end
@protocol LTLoginDelegate <NSObject>
@optional
-(void)storeLoginCredentials;
-(void)login:(LTLogin*)login didSuccessStoringCredentials:(BOOL)success;
-(void)login:(LTLogin*)login didFailStoringCredentials:(BOOL)success;
@required
-(void)login:(LTLogin*)login didBecomeActive:(BOOL)success;
-(void)login:(LTLogin*)login didFailWithError:(NSError*)error;
-(void)login:(LTLogin*)login didSuccessWithMessage:(NSString*)message;
@end
Login.m
@implementation LTLogin
-(void)commitLogin:(NSString *)login password:(NSString *)password {
// >>> ....
if([self.delegate respondsToSelector:@selector(login:didBecomeActive:)]) {
[self.delegate login:self didBecomeActive:YES];
}
}
-(void)login:(LTLogin *)login didBecomeActive:(BOOL)success {
// >>> ....
// Don't get called here at all!!!!!!
[self.delegate login:self didSuccessWithMessage:@"Success"];
}
-(void)login:(LTLogin *)login didSuccessWithMessage:(NSString *)message {
}
@end
Controller.m或者
-(void)viewDidAppear:(BOOL)animated {
#if LOG == 0
NSLog(@"This one");
#endif
LTLogin *login = [[LTLogin alloc]init];
login.delegate = self;
[login commitLogin:@"[email protected]" password:@"123123"];
}
-(void)login:(LTLogin *)login didFailWithError:(NSError *)error {
#if LOG == 1
NSLog(@"login didFailWithError: Error %@",error);
#endif
}
-(void)login:(LTLogin *)login didSuccessWithMessage:(NSString *)message {
#if LOG == 1
NSLog(@"login didSucceedWithMessage: %@",message);
#endif
}
-(void)login:(LTLogin *)login didBecomeActive:(BOOL)success {
#if LOG == 1
NSLog(@"login didBecomeActive");
#endif
// Gets called here only!!!!!!
}
didBecomeActive沒有被調用登錄控制器上。我的目標是建立一系列可以相互呼叫的回調方法。
爲什麼你不使用塊? –
因爲這次我想使用代表。 – NCFUSN
你可以嘗試更改方法的名稱 - (無效)登錄:(LTLogin *)登錄didBecomeActive:(BOOL)Login.m類中的成功,因爲委託中有一個方法具有相同的名稱? – Arun