[英]ios delegate method not being called
我有兩個班級-例如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);
}
永遠不會調用Class2
的delegate
方法。 我在這里做錯了什么?
但是當我在Class1
編寫委托方法-(void)farePriceReceivedWithDetails:(id)farePrice
時,它的工作正常。
您應該將此對象保留在Class1.h中作為實例變量。 這樣它將一直存在,直到該類對象存在。 您當前正在做的只是在方法中分配它。 一旦方法執行並完成,它將被釋放。 因此,您的代表回電將無法進行。
所以避免這條線
SPNNetworkEngine *networkEngine = [[SPNNetworkEngine alloc] init];
將上面的代碼更改為如下所示
在Class1中聲明
@property (nonatomic, strong) SPNNetworkEngine *networkEngine;
然后做
self.networkEngine = [[SPNNetworkEngine alloc] init];
在Class1中,您正在調用[networkEngine getTestPrice]
,我認為這意味着[networkEngine getFarePrice]
函數(因為您在其中調用委托)
在Class2中,您必須調用相同的函數: [networkEngine getTestPrice]
您是否已將SPNNetworkEngineDelegate添加到Class2.h中的委托列表中?
即
@interface Class2 : UIViewController <SPNNetworkEngineDelegate>
您的編碼方法錯誤您在Class1中分配了SPNNetworkEngine類,並將SPNNetworkEngine的委托設置為self。 因此,該代表在class1中被解雇。 但是您需要在class2中使用此方法,因此必須為該委托分配class2對象。
第二點是你必須用這個來改變這行
@protocol SPNNetworkEngineDelegate <NSObject>
- (void) farePriceReceivedWithDetails:(id) farePrice;
@end
@property (nonatomic, strong) id <SPNNetworkEngineDelegate> delegate;
- (void) getFarePrice;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.