我已经创建了一个自定义类NetworkManager。它有两个可选的委托方法。它工作得很好,但问题是当有NetworkManager
的多个实例时如何执行委托方法。这是我的代码片段;
NetworkManager.h
@protocol NetworkManagerDelegate <NSObject>
@optional
//call back for success message
-(void)handleSuccessMessageWithDictionary:(NSDictionary *) jsonDictionary;
//call back for fail message
-(void)handleFailureMessageWitDictionary:(NSDictionary *) jsonDictionary;
@end
@interface NetworkManager : NSObject
@property (nonatomic,assign) id<NetworkManagerDelegate> delegate;
@end
然后在我的视图控制器中我有:
#pragma-mark NetowrkManager Delegate
-(void)handleFailureMessageWitDictionary:(NSDictionary *)jsonDictionary{
//failure
}
-(void)handleSuccessMessageWithDictionary:(NSDictionary *)jsonDictionary{
//success
}
这对NetworkManager
的一个实例完全正常,但如何区分两个实例?
例如,
#pragma-mark NetowrkManager Delegate
-(void)handleFailureMessageWitDictionary:(NSDictionary *)jsonDictionary{
//if its networkManagerA do
// method A
//else if its networkManagerB do
//method B
-(void)handleSuccessMessageWithDictionary:(NSDictionary *)jsonDictionary{
//if its networkManagerA do
// method A
//else if its networkManagerB do
//method B
}
非常感谢任何建议!
答案 0 :(得分:1)
将委托的对象的实例传递回委托是正常的;请参阅UITableViewDelegate
方法,例如:
- (BOOL) tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath;
这样,单个委托对象可以在多个实例上工作。
答案 1 :(得分:0)
在创建NetworkManager.h的对象时,设置一个属性,以确定哪个类创建了它的对象。在委托方法中,检查属性并相应地执行操作。 在NetworkManager.h中创建一个属性@property(nonatomic)id className;并在创建NetworkManager.h的对象时设置它:NETWORKManager.className = [self class]; 现在进来 - (void)handleFailureMessageWitDictionary:(NSDictionary *)jsonDictionary { if(_className == A){ ... } else if(_className == B){ ... } }
答案 2 :(得分:0)
将实例传递回您的委托,类似于UITableView
委派的工作方式:
-(void)handleSuccessMessageWithDictionary:(NSDictionary *)jsonDictionary manager:(NetworkManager *)manager
然后,只需从发送回调的实例传递self
:
[self handleSuccessMessageWithDictionary:json manager:self];