我有两个类 - 例如 Class1
和 Class2
Class1
有一个按钮,当按下该按钮时会向 Class2
推送 segue。
此外,当按下按钮时,正在另一个类上进行网络调用。
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);
}
永远不会调用Class2
中的delegate
方法。我在这里做错了什么?
但是当我在 Class1
中编写委托(delegate)方法 -(void)farePriceReceivedWithDetails:(id)farePrice
时,它工作正常。
最佳答案
您的编码方法错误您在您的 Class1 中分配了 SPNNetworkEngine 类并将 SPNNetworkEngine 的委托(delegate)设置为自身。所以委托(delegate)在 class1 中被解雇了。但是你想在 class2 中使用这个方法,所以你必须为这个委托(delegate)分配 class2 对象。
第二点是你必须用这个改变这一行
@protocol SPNNetworkEngineDelegate <NSObject>
- (void) farePriceReceivedWithDetails:(id) farePrice;
@end
@property (nonatomic, strong) id <SPNNetworkEngineDelegate> delegate;
- (void) getFarePrice;
关于ios委托(delegate)方法未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25285322/