大佬教程收集整理的这篇文章主要介绍了在Xcode 8升级后,iOS10中的应用程序崩溃,返回了malloc错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_518_19@malloc:*对象0x1700bea80的错误:未分配被释放的指针
*在malloc_error_break中设置断点以进行调试
我已经做了一些测试,并将错误缩小到以下代码中的’createNativeAd’函数.
任何人都可以看到为什么会抛出这个错误?
// // FacebookAdPlugin.m // TestAdMobCombo // // Created by Xie Liming on 14-11-8. // // #import <FBAudienceNetwork/FBAudienceNetwork.h> #import "UITapGestureRecognizer+Spec.h" #import "FacebookAdPlugin.h" #define test_BAnnER_ID @"726719434140206_777151452430337" #define test_INERSTITIAL_ID @"726719434140206_777151589096990" #define test_NATIVE_ID @"726719434140206_777151705763645" #define OPT_DEVICE_HASH @"deviceHash" @interface FacebookAdPlugin()<FBAdViewDelegate,FBInterstitialAdDelegate,FBNativeAdDelegate,UIGestureRecognizerDelegate> @property (assign) FBAdSize adSize; @property (nonatomic,retain) NSMutableDictionary* nativeads; - (void) __removeNativeAd:(NSString*)adId; - (void) fireNativeAdLoadEvent:(FBNativeAd*)nativeAd; @end // ------------------------------------------------------------------ @interface UITrackingView : UIView @end @implementation UITrackingView - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { // Always ignore the touch event,so that we can scroll the webview beneath. // We will inovke GestureRecognizer callBACk ourselves. return nil; } @end // ------------------------------------------------------------------ @interface FlexNativeAd : NSObject @property (nonatomic,retain) NSString* adId; @property (nonatomic,retain) FBNativeAd* ad; @property (nonatomic,retain) UITrackingView* view; @property (assign) int x,y,w,h; - (FlexNativeAd*) init; @end @implementation FlexNativeAd - (FlexNativeAd*) init { self.adId = NULL; self.ad = NULL; self.view = NULL; self.x = 0; self.y = 0; self.w = 0; self.h = 0; return self; } @end // ------------------------------------------------------------------ @implementation FacebookAdPlugin - (void)pluginInitialize { [super pluginInitialize]; self.adSize = [self __AdSizeFromString:@"smaRT_BAnnER"]; self.nativeads = [[NSMutableDictionary alloc] init]; } - (NSString*) __getProductShortName{ return @"FacebookAds"; } - (NSString*) __getTESTBAnnerId; { return test_BAnnER_ID; } - (NSString*) __getTesTinterstitialId { return test_INERSTITIAL_ID; } - (FBAdSizE) __AdSizeFromString:(NSString*)str { FBAdSize sz; if ([str isEqualToString:@"BAnnER"]) { sz = kFBAdSize320x50; // other size not supported by facebook audience network: FULL_BAnnER,MEDIUM_RECTANGLE,LEADERBOARD,SKYSCRAPER //} else if ([str isEqualToString:@"smaRT_BAnnER"]) { } else { BOOL isIPAD = ([[UIDevice currentDevice] userInterfaceI@L_687_11@m] == UIUserInterfaceI@L_687_11@mPad); sz = isIPAD ? kFBAdSizeHeight90BAnner : kFBAdSizeHeight50BAnner; } return sz; } - (void) parSEOptions:(NSDictionary *)options { [super parSEOptions:options]; NSString* str = [options objectForKey:OPT_AD_SIZE]; if(str) { self.adSize = [self __AdSizeFromString:str]; } if(self.isTesTing) { self.testTraffic = true; str = [options objectForKey:OPT_DEVICE_HASH]; if(str && [str length]>0) { NSLog(@"set device hash: %@",str); [FBAdSetTings addTestDevice:str]; } // TODO: add device hash,but kNow how to get the FB hash id on ios ... } } - (UIView*) __createAdView:(NSString*)adId { FBAdView* ad = [[FBAdView alloc] initWithPlacementID:adId adSize:self.adSize rootViewController:[self getViewController]]; ad.delegate= self; if(self.adSize.size.height == 50 || self.adSize.size.height == 90) { ad.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin| UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleTopMargin; } return ad; } - (int) __getAdViewWidth:(UIView*)view { return view.frame.size.width; } - (int) __getAdViewHeight:(UIView*)view { return view.frame.size.height; } - (void) __loadAdView:(UIView*)view { if([view isKindOfClass:[FBAdView class]]) { FBAdView* ad = (FBAdView*) view; [ad loadAd]; } } - (void) __pauseAdView:(UIView*)view { if([view isKindOfClass:[FBAdView class]]) { //FBAdView* ad = (FBAdView*) view; // [ad pause]; } } - (void) __resumeAdView:(UIView*)view { if([view isKindOfClass:[FBAdView class]]) { //FBAdView* ad = (FBAdView*) view; // [ad resume]; } } - (void) __destroyAdView:(UIView*)view { if([view isKindOfClass:[FBAdView class]]) { FBAdView* ad = (FBAdView*) view; ad.delegate = nil; } } - (NSObject*) __createInterstitial:(NSString*)adId { FBInterstitialAd* ad = [[FBInterstitialAd alloc] initWithPlacementID:adId]; ad.delegate = self; return ad; } - (void) __loadInterstitial:(NSObject*)interstitial { if([interstitial isKindOfClass:[FBInterstitialAd class]]) { FBInterstitialAd* ad = (FBInterstitialAd*) interstitial; [ad loadAd]; } } - (void) __showInterstitial:(NSObject*)interstitial { if([interstitial isKindOfClass:[FBInterstitialAd class]]) { FBInterstitialAd* ad = (FBInterstitialAd*) interstitial; if(ad && ad.isAdValid) { [ad showAdFromRootViewController:[self getViewController]]; } } } - (void) __destroyInterstitial:(NSObject*)interstitial { if([interstitial isKindOfClass:[FBInterstitialAd class]]) { FBInterstitialAd* ad = (FBInterstitialAd*) interstitial; ad.delegate = nil; } } - (void)handleTapOnWebView:(UITapGestureRecognizer *)sender { //NSLog(@"handleTapOnWeb"); for(id key in self.nativeads) { FlexNativeAd* unit = (FlexNativeAd*) [self.nativeads objectForKey:key]; CGPoint point = [sender LOCATIOnInView:unit.view]; if([unit.view poinTinside:point withEvent:nil]) { NSLog(@"Native Ad view area tapped"); NSArray* handlers = [unit.view gestureRecognizers]; for(id handler in handlers) { if([handler isKindOfClass:[UITapGestureRecognizer class]]) { UITapGestureRecognizer* tapHandler = (UITapGestureRecognizer*) handler; // Here we call the injected method,defined in "UITapGestureRecognizer+Spec.m" if([tapHandler respondsToSELEctor:@SELEctor(performTapWithView:andPoint:)]) { [tapHandler performTapWithView:unit.view andPoint:point]; } } } } } } - (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer{ return YES; } - (void)createNativeAd:(CDVInvokedUrlCommand *)command { NSLog(@"createNativeAd"); if([command.arguments count] >= 1) { NSString* adId = [command argumentATindex:0]; if(self.testTraffiC) adId = test_INERSTITIAL_ID; FlexNativeAd* unit = [self.nativeads objectForKey:adId]; if(unit) { if(unit.adId) { [self __removeNativeAd:unit.adId]; } } unit = [[FlexNativeAd alloc] init]; unit.adId = adId; CGRect adRect = {{0,0},{0,0}}; unit.view = [[UITrackingView alloc] initWithFrame:adRect]; [[self getView] addSubview:unit.view]; // add tap handler to handle tap on webview UITapGestureRecognizer *webViewTapped = [[UITapGestureRecognizer alloc] initWithTarget:self action:@SELEctor(handleTapOnWebView:)]; webViewTapped.numberOfTapsrequired = 1; webViewTapped.delegate = self; [[self getView] addGestureRecognizer:webViewTapped]; if(self.isTesTing) { [unit.view setBACkgroundColor:[[UIColor greenColor] colorWithAlphaComponent:0.2f]]; } unit.ad = [[FBNativeAd alloc] initWithPlacementID:adId]; unit.ad.delegate = self; [self.nativeads setObject:unit forKey:adId]; [unit.ad loadAd]; [self sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK] to:command.callBACkId]; } else { [self sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"invalid arguments"] to:command.callBACkId]; } } - (void) __removeNativeAd:(NSString*)adId { FlexNativeAd* unit = [self.nativeads objectForKey:adId]; if(unit) { [self.nativeads removeObjectForKey:adId]; if(unit.view) { CGRect adFrame = {{0,0}}; unit.view.frame = adFrame; [unit.view removeFromSuperview]; } if(unit.ad) { [unit.ad unregisterView]; } } } - (void)removeNativeAd:(CDVInvokedUrlCommand *)command { NSLog(@"removeNativeAd"); if([command.arguments count] >= 1) { NSString* adId = [command argumentATindex:0]; [self __removeNativeAd:adId]; [self sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK] to:command.callBACkId]; } else { [self sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"invalid arguments"] to:command.callBACkId]; } } - (void)setNativeAdClickArea:(CDVInvokedUrlCommand *)command { NSLog(@"setNativeAdClickArea"); if([command.arguments count] >= 5) { NSString* adId = [command argumentATindex:0]; FlexNativeAd* unit = [self.nativeads objectForKey:adId]; if(unit && unit.view) { int x = [[command argumentATindex:1 withDefault:@"0"] intValue]; int y = [[command argumentATindex:2 withDefault:@"0"] intValue]; int w = [[command argumentATindex:3 withDefault:@"0"] intValue]; int h = [[command argumentATindex:4 withDefault:@"0"] intValue]; CGRect adRect = {{x,y},{w,h}}; unit.view.frame = adRect; [self sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_OK] to:command.callBACkId]; } else { [self sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"native ad not exists"] to:command.callBACkId]; } } else { [self sendPluginResult:[CDVPluginResult resultWithStatus:CDVCommandStatus_ERROR messageAsString:@"invalid arguments"] to:command.callBACkId]; } } #pragma mark FBAdViewDelegate implementation /** * document.addEventListener('onAdLoaded',function(data)); * document.addEventListener('onAdFailLoad',function(data)); * document.addEventListener('onAdPresent',function(data)); * document.addEventListener('onAdDismiss',function(data)); * document.addEventListener('onAdLeaveApp',function(data)); */ - (void)adViewDidClick:(FBAdView *)adView { [self fireAdEvent:EVENT_AD_LEAVEAPP withType:ADTYPE_BAnnER]; } - (void)adViewDidFinishHandlingClick:(FBAdView *)adView { [self fireAdEvent:EVENT_AD_DISMISS withType:ADTYPE_BAnnER]; } - (void)adViewDidLoad:(FBAdView *)adView { if((! self.bAnnerVisiblE) && self.autoShowBAnner) { dispatch_async(dispatch_get_main_queue(),^{ [self __showBAnner:self.adPosition atX:self.posx atY:self.posy]; }); } [self fireEvent:[self __getProductShortName] event:@"onBAnnerReceive" withData:NULL]; [self fireAdEvent:EVENT_AD_LOADED withType:ADTYPE_BAnnER]; } - (void)adView:(FBAdView *)adView didFailWithError:(NSError *)error { [self fireAdErrorEvent:EVENT_AD_FAILLOAD withCode:(int)error.code withMsg:[error localizedDescription] withType:ADTYPE_BAnnER]; } - (void)adViewWillLogImpression:(FBAdView *)adView { [self fireAdEvent:EVENT_AD_PRESENT withType:ADTYPE_BAnnER]; } /////////////////////////////////////////////////////////////////////////////////////////////////// #pragma mark - FBInterstitialAdDelegate /** * document.addEventListener('onAdLoaded',function(data)); */ - (void)interstitialAdDidLoad:(FBInterstitialAd *)interstitialAd { if (self.interstitial && self.autoShowInterstitial) { dispatch_async(dispatch_get_main_queue(),^{ [self __showInterstitial:self.interstitial]; }); } [self fireAdEvent:EVENT_AD_LOADED withType:ADTYPE_INTERSTITIAL]; } - (void)interstitialAd:(FBInterstitialAd *)interstitialAd didFailWithError:(NSError *)error { [self fireAdErrorEvent:EVENT_AD_FAILLOAD withCode:(int)error.code withMsg:[error localizedDescription] withType:ADTYPE_INTERSTITIAL]; } - (void)interstitialAdDidClick:(FBInterstitialAd *)interstitialAd { [self fireAdEvent:EVENT_AD_LEAVEAPP withType:ADTYPE_INTERSTITIAL]; } - (void)interstitialAdDidClose:(FBInterstitialAd *)interstitialAd { [self fireAdEvent:EVENT_AD_DISMISS withType:ADTYPE_INTERSTITIAL]; if(self.interstitial) { [self __destroyInterstitial:self.interstitial]; self.interstitial = nil; } } - (void)interstitialAdWillClose:(FBInterstitialAd *)interstitialAd { [self fireAdEvent:EVENT_AD_WILLDISMISS withType:ADTYPE_INTERSTITIAL]; } - (void)interstitialAdWillLogImpression:(FBInterstitialAd *)interstitialAd { [self fireAdEvent:EVENT_AD_WILLPRESENT withType:ADTYPE_INTERSTITIAL]; } /** * document.addEventListener('onAdLoaded',function(data)); */ - (void)nativeAd:(FBNativeAd *)nativeAd didFailWithError:(NSError *)error { [self fireAdErrorEvent:EVENT_AD_FAILLOAD withCode:(int)error.code withMsg:[error localizedDescription] withType:ADTYPE_NATIVE]; } - (void)nativeAdDidClick:(FBNativeAd *)nativeAd { [self fireAdEvent:EVENT_AD_LEAVEAPP withType:ADTYPE_NATIVE]; } - (void)nativeAdDidFinishHandlingClick:(FBNativeAd *)nativeAd { [self fireAdEvent:EVENT_AD_DISMISS withType:ADTYPE_NATIVE]; } - (void)nativeAdDidLoad:(FBNativeAd *)nativeAd { [self fireNativeAdLoadEvent:nativeAd]; } - (void) fireNativeAdLoadEvent:(FBNativeAd*)nativeAd { [self.nativeads enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop) { NSString* adId = (NSString*) key; FlexNativeAd* unit = (FlexNativeAd*) obj; if(unit && unit.ad == nativeAd) { NSString *titleForAd = nativeAd.title; NSString *bodyTextForAd = nativeAd.body; FBAdImage *coverImage = nativeAd.coverImage; FBAdImage *iconForAd = nativeAd.icon; NSString *socialContextForAd = nativeAd.socialContext; struct FBAdStarrating appratingForAd = nativeAd.starrating; NSString *titleForAdButton = nativeAd.callToAction; NSMutableDictionary* coverInfo = [[NSMutableDictionary alloc] init]; [coverInfo SETVALue:[coverImage.url absoluteString] forKey:@"url"]; [coverInfo SETVALue:[NSnumber numberWithInt:coverImage.width] forKey:@"width"]; [coverInfo SETVALue:[NSnumber numberWithInt:coverImage.height] forKey:@"height"]; NSMutableDictionary* iconInfo = [[NSMutableDictionary alloc] init]; [iconInfo SETVALue:[iconForAd.url absoluteString] forKey:@"url"]; [iconInfo SETVALue:[NSnumber numberWithInt:iconForAd.width] forKey:@"width"]; [iconInfo SETVALue:[NSnumber numberWithInt:iconForAd.height] forKey:@"height"]; NSMutableDictionary* adRes = [[NSMutableDictionary alloc] init]; [adRes SETVALue:coverInfo forKey:@"coverImage"]; [adRes SETVALue:iconInfo forKey:@"icon"]; [adRes SETVALue@R_56_6964@ForAd forKey:@"title"]; [adRes SETVALue:bodyTextForAd forKey:@"body"]; [adRes SETVALue:socialContextForAd forKey:@"socialContext"]; [adRes SETVALue:[NSnumber numberWithFloat:appratingForAd.value] forKey:@"rating"]; [adRes SETVALue:[NSnumber numberWithInt:appratingForAd.scale] forKey:@"ratingScale"]; [adRes SETVALue@R_56_6964@ForAdButton forKey:@"buttontext"]; NSMutableDictionary* json = [[NSMutableDictionary alloc] init]; [json SETVALue:[self __getProductShortName] forKey:@"adNetwork"]; [json SETVALue:EVENT_AD_LOADED forKey:@"adEvent"]; [json SETVALue:ADTYPE_NATIVE forKey:@"adType"]; [json SETVALue:adId forKey:@"adId"]; [json SETVALue:adRes forKey:@"adRes"]; NSError * err; NSData * jsonData = [NSJSONserialization dataWithJSONObject:json options:0 error:&err]; NSString * jsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; [unit.ad registerViewForInteraction:unit.view withViewController:[self getViewController]]; [self fireEvent:[self __getProductShortName] event:EVENT_AD_LOADED withData:jsonStr]; *stop = YES; } }]; } - (void)nativeAdWillLogImpression:(FBNativeAd *)nativeAd { [self fireAdEvent:EVENT_AD_PRESENT withType:ADTYPE_NATIVE]; } @end
完整的源代码可以在https://github.com/floatinghotpot/cordova-plugin-facebookads找到
以上是大佬教程为你收集整理的在Xcode 8升级后,iOS10中的应用程序崩溃,返回了malloc错误全部内容,希望文章能够帮你解决在Xcode 8升级后,iOS10中的应用程序崩溃,返回了malloc错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。