具有多个实例的自定义委托方法

时间:2015-01-05 15:55:24

标签: ios objective-c delegates 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

}

非常感谢任何建议!

3 个答案:

答案 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];
相关问题