没有调用ios委托方法

时间:2014-08-13 11:47:03

标签: ios class delegates

我有两个课程 - 比如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);
}

永远不会调用delegate中的Class2方法。我在这做错了什么?

但是当我在-(void)farePriceReceivedWithDetails:(id)farePrice中编写委托方法Class1时,它的工作正常。

4 个答案:

答案 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;