具有多个实例的自定义委托方法
Custom delegate methods with multiple instances
我创建了一个自定义类 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
}
非常感谢任何建议!
在创建 NetworkManager.h 的对象时,设置一个 属性 作为 class 创建其 object.In 委托方法的对象,检查 属性 和相应地执行您的操作。
在NetworkManager.h中创建一个属性@属性(非原子)id className;并在创建 NetworkManager.h 的对象时设置它:NETWORKManager.className = [self class];
现在在
-(void)handleFailureMessageWitDictionary:(NSDictionary *)jsonDictionary{
如果 (_class姓名 == A){
...
}
else if (_className == B){
...
}
}
将delegated对象的实例传回delegate是正常的;请参阅 UITableViewDelegate
方法,例如:
- (BOOL) tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath;
这样一个委托对象就可以在多个实例上工作。
将实例传递回您的委托,类似于 UITableView
委托的工作方式:
-(void)handleSuccessMessageWithDictionary:(NSDictionary *)jsonDictionary manager:(NetworkManager *)manager
然后,只需从发送回调的实例传递self
:
[self handleSuccessMessageWithDictionary:json manager:self];
我创建了一个自定义类 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
}
非常感谢任何建议!
在创建 NetworkManager.h 的对象时,设置一个 属性 作为 class 创建其 object.In 委托方法的对象,检查 属性 和相应地执行您的操作。 在NetworkManager.h中创建一个属性@属性(非原子)id className;并在创建 NetworkManager.h 的对象时设置它:NETWORKManager.className = [self class]; 现在在 -(void)handleFailureMessageWitDictionary:(NSDictionary *)jsonDictionary{ 如果 (_class姓名 == A){ ... } else if (_className == B){ ... } }
将delegated对象的实例传回delegate是正常的;请参阅 UITableViewDelegate
方法,例如:
- (BOOL) tableView:(UITableView *)tableView
shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath;
这样一个委托对象就可以在多个实例上工作。
将实例传递回您的委托,类似于 UITableView
委托的工作方式:
-(void)handleSuccessMessageWithDictionary:(NSDictionary *)jsonDictionary manager:(NetworkManager *)manager
然后,只需从发送回调的实例传递self
:
[self handleSuccessMessageWithDictionary:json manager:self];