Когда я передаю объектно-c-протокол в качестве параметра, когда и этот делегат затем используется для запуска одного из его методов, метод не запускается.Передача делегата протокола цели-c в качестве параметра
Я использую делегата от Paypal iOS SDK определяется следующим образом:
@protocol PayPalPaymentDelegate <NSObject>
- (void)payPalPaymentDidCancel:(PayPalPaymentViewController *)paymentViewController;
@end
У меня есть UIViewController, который реализует протокол:
//simpleviewcontroller.h
@interface SimpleViewController : UIViewController<PayPalPaymentDelegate>
и сигнатуру метода, как следующее:
// HelperFunctions.m
+ (void) doSomething: (id<PayPalPaymentDelegate>)paypalDelegate
{
// the selector 'payPalPaymentDidCancel' DOES fire
[paypalDelegate performSelector:@selector(payPalPaymentDidCancel:) withObject:self]
}
// called from simpleviewcontroller.m that implements PayPalPaymentDelegate
[HelperFunctions doSomething: self]
Проблема в том, что когда paypal возвращает результат, i т не вызывает делегат:
// code inside of the 'success' block of an AFNetworking call
PayPalPaymentViewController *paymentViewController;
paymentViewController = [[PayPalPaymentViewController alloc] initWithPayment:payment
configuration:paypalConfiguration
delegate:paypalDelegate];
paypalDelegate переданного «делегат» здесь никогда не срабатывают по PayPal. Принимая во внимание, что он срабатывает, если выполняется с помощью simpleviewcontroller.m, а не с помощью метода doSomething
Я думаю, вы также должны передать SimpleViewController, так как для метода делегата также нужен контроллер вида. Он работает с SimpleViewController, так как вы передаете «его», но он не работает, поскольку вы передаете объект «HelperFunctions». (О, подождите, делегат! Просто используйте paypalDelegate вместо себя.) – EDUsta
В строке, где вы пишете '[paypalDelegate performSelector: @selector (payPalPaymentDidCancel :) withObject: self];', что такое 'self', предназначенное для ссылки на ? В конце концов, это метод класса. –