簡體   English   中英

ios委托方法未調用

[英]ios delegate method not being called

我有兩個班級-例如Class1Class2

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);
}

永遠不會調用Class2delegate方法。 我在這里做錯了什么?

但是當我在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM