我有两个课程 - 比如Class1
和Class2
Class1
有一个按钮,当按下按钮时,会将推送到Class2
。
此外,按下按钮时,正在对另一个班级进行网络通话。
Class1
代码:
- (IBAction)sellPressed:(id)sender
{
SPNNetworkEngine *networkEngine = [[SPNNetworkEngine alloc] init];
networkEngine.delegate = self;
[networkEngine getFarePrice];
}
在Network
课程中,我有:
在.h
档案
@protocol SPNNetworkEngineDelegate <NSObject>
- (void) farePriceReceivedWithDetails:(id) farePrice;
@end
@property (nonatomic, weak) id delegate;
- (void) getFarePrice;
在.m
档案
- (void) getFarePrice
{
...........
.......
//After all the operations, I delegate
if ([delegate respondsToSelector:@selector(farePriceReceivedWithDetails:)])
[delegate farePriceReceivedWithDetails:cost];
}
}
在Class2
我有,
- (void)viewDidLoad
{
[super viewDidLoad];
SPNNetworkEngine *networkEngine = [[SPNNetworkEngine alloc] init];
networkEngine.delegate = self;
}
// Delegate method
- (void) farePriceReceivedWithDetails:(id)farePrice
{
NSLog(@"FarePrice %@", farePrice);
}
永远不会调用delegate
中的Class2
方法。我在这做错了什么?
但是当我在-(void)farePriceReceivedWithDetails:(id)farePrice
中编写委托方法Class1
时,它的工作正常。
答案 0 :(得分:1)
您应该将此对象保留在Class1.h中作为实例变量。这样它就会存在,直到该类对象存在。你目前正在做的只是在一个方法中分配它。一旦该方法执行&amp;完成后,它将被取消分配。所以你的代表回电将无效。
所以请避免这一行
SPNNetworkEngine *networkEngine = [[SPNNetworkEngine alloc] init];
将上述代码更改为如下所示
在Class1中声明
@property (nonatomic, strong) SPNNetworkEngine *networkEngine;
然后做
self.networkEngine = [[SPNNetworkEngine alloc] init];
答案 1 :(得分:1)
在你打电话给[networkEngine getTestPrice]
的Class1中,我认为这意味着[networkEngine getFarePrice]
功能(因为你在那里调用代表)
在Class2中,您必须调用相同的函数:[networkEngine getTestPrice]
答案 2 :(得分:1)
您是否已将SPNNetworkEngineDelegate添加到Class2.h中的委托列表中?
即。
@interface Class2 : UIViewController <SPNNetworkEngineDelegate>
答案 3 :(得分:1)
您的编码approch错误您在Class1中分配SPNNetworkEngine类并设置SPNNetworkEngine的委托是self。所以代表在class1中火了。但是你想在class2中使用这个方法,所以你必须为这个委托分配class2对象。
第二点是你必须用这个改变这一行
@protocol SPNNetworkEngineDelegate <NSObject>
- (void) farePriceReceivedWithDetails:(id) farePrice;
@end
@property (nonatomic, strong) id <SPNNetworkEngineDelegate> delegate;
- (void) getFarePrice;