Facebook本地广告FBNativeAdsManagerDelegate实现方法没有调用

Facebook本地广告中的FBNativeAdsManagerDelegateUIViewController类中正常工作,但在自定义NSObject类中使用时,它不工作,即其委托方法nativeAdsLoadednativeAdsFailedToLoadWithError未被调用。

CustomFBAd.h文件

 @import FBAudienceNetwork; #import <Foundation/Foundation.h> @protocol OnFBNativeAdLoadedDelegate<NSObject> - (void)onFBNativeAdLoaded:(UIView *)adView; @end @interface CustomFBAd : NSObject @property (nonatomic,weak) id <OnFBNativeAdLoadedDelegate>delegate; -(void)requestNativeAd:(NSString *)FaceBookPlacementID; @end 

CustomFBAd.m文件

 #import "CustomFBAd.h" @interface CustomFBAd ()<FBNativeAdsManagerDelegate,FBNativeAdDelegate> @property (nonatomic, strong) FBNativeAdsManager *manager; @property (nonatomic, weak) FBNativeAdScrollView *scrollView; @end @implementation CustomFBAd -(void)requestNativeAd:(NSString *)FaceBookPlacementID{ if(FaceBookPlacementID.length != 0){ FBNativeAdsManager *manager = [[FBNativeAdsManager alloc] initWithPlacementID:FaceBookPlacementID forNumAdsRequested:5]; manager.delegate = self; [FBAdSettings addTestDevice:@"cf1bb93becbe6e31f26fdf7d80d19b4ae225afaa"]; [manager loadAds]; self.manager = manager; } } #pragma mark - FBNativeAdDelegate implementation - (void)nativeAdDidClick:(FBNativeAd *)nativeAd { // NSLog(@"Native ad was clicked."); } - (void)nativeAdDidFinishHandlingClick:(FBNativeAd *)nativeAd { // NSLog(@"Native ad did finish click handling."); } - (void)nativeAdWillLogImpression:(FBNativeAd *)nativeAd { // NSLog(@"Native ad impression is being captured."); } #pragma mark FBNativeAdsManagerDelegate -(void)nativeAdDidLoad:(FBNativeAd *)nativeAd { } - (void)nativeAdsLoaded { NSLog(@"Native ads loaded, constructing native UI..."); if (self.scrollView) { [self.scrollView removeFromSuperview]; self.scrollView = nil; } FBNativeAdScrollView *scrollView = [[FBNativeAdScrollView alloc] initWithNativeAdsManager:self.manager withType:FBNativeAdViewTypeGenericHeight120]; scrollView.xInset = 0; scrollView.delegate = self; self.scrollView = scrollView; [self.delegate onFBNativeAdLoaded:self.scrollView]; } - (void)nativeAdsFailedToLoadWithError:(NSError *)error { NSLog(@"Native ads failed to load with error: %@", error); } @end 

正如上面的代码所述,我在requestNativeAd方法中设置了FBNativeAdsManager的委托

 manager.delegate = self; 

也用作FBNativeAdsManagerDelegate,FBNativeAdDelegate

 @interface CustomFBAd ()<FBNativeAdsManagerDelegate,FBNativeAdDelegate> 

并称这个代码为

  CustomFBAd *objFBAd = [[CustomFBAd alloc]init]; objFBAd.delegate = self; [objFBAd requestNativeAd:@"my_FB_placement_Id"]; 

任何线索(注意:相同的代码工作,如果我在UIViewController使用它)? 谢谢

如果在uiviewcontroller中调用委托方法,那么代码有问题。 我想你必须在你的控制器中有一个很强的CustomFBAd的参考。 因为没有其他引用正在抓住你的CustomFBAd。 希望能帮助到你

最后它的作品经过强烈的参考CustomFBAd它的作品就像一个魅力(感谢@MuhammadZohaibEhsan)。所以初始化CustomFBAd作为

 @property(nonatomic, strong) CustomFBAd * objFBAd; 

并改变

  CustomFBAd *objFBAd = [[CustomFBAd alloc]init]; objFBAd.delegate = self; [objFBAd requestNativeAd:@"my_FB_placement_Id"]; 

  self.objFBAd = [[CustomFBAd alloc]init]; self.objFBAd.delegate = self; [self.objFBAd requestNativeAd:@"my_FB_placement_Id"];