Объект C Два делегата имеют одинаковое имя функции: Двойное объявление метода 'interstitialDidReceiveAd:'
GADInterstitialDelegate и IMInterstitialDelegate имеют одно и то же имя функции: interstitialDidReceiveAd
//inmob
- (void)interstitialDidReceiveAd:(IMInterstitial *)ad
//callback:(id<IMInterstitialDelegate>)callback
{
[ad presentInterstitialAnimated:YES];
NSLog(@"!!! inmob interstitialDidReceiveAd ok ");
}
// Sent when an interstitial ad request failed
- (void)interstitial:(IMInterstitial *)ad didFailToReceiveAdWithError:(IMError *)error
//callback:(id<IMInterstitialDelegate>)callback
{
NSLog(@"!!! inmob didFailToReceiveAdWithError ");
// NSString *errorMessage = [NSString stringWithFormat:@"Loading ad (%@) failed. Error code: %d, message: //%@", [self.detailItem objectForKey:@"title"], [error code], [error localizedDescription]];
//NSLog(@"%@", errorMessage);
}
//admob
- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitialAdmob
{
NSLog(@"!!! admob interstitialDidReceiveAd ok");
}
- (void)interstitial:(GADInterstitial *)interstitial
//callback:(id<GADInterstitialDelegate>)callback
didFailToReceiveAdWithError:(GADRequestError *)error
{
NSLog(@"!!!!!!! admob interstitial error!");
}
Ошибка сборки: двойное объявление метода 'interstitialDidReceiveAd:'
1 ответ
Решение
Objective-C не позволяет использовать несколько методов с одним и тем же именем, но принимать разные типы. К счастью это также слабо напечатано. Таким образом, вы должны иметь возможность сойти с рук:
- (void)interstitialDidReceiveAd:(id)interstitial
{
if([interstitial isKindOfClass:[GADInterstitial class]])
[self admobInterstitialDidReceiveAd:interstitial];
else
[self inmobiInterstitialDidReceiveAd:interstitial];
}
Или любой такой более тщательный тест, основанный на получении id
и проверка его типа, когда он прибывает.