Xcode 8 升级后,iOS10 应用程序崩溃,返回 malloc 错误

2024-02-04

我最近升级到了 iOS10 和 Xcode 8,之后一些以前可以工作的代码现在不再工作了。当代码运行时,应用程序崩溃并在控制台中显示以下错误消息:

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] userInterfaceIdiom] == UIUserInterfaceIdiomPad);
        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},{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));
 * document.addEventListener('onAdFailLoad', function(data));
 * document.addEventListener('onAdPresent', function(data));
 * document.addEventListener('onAdDismiss', function(data));
 * document.addEventListener('onAdLeaveApp', 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));
 * document.addEventListener('onAdFailLoad', function(data));
 * document.addEventListener('onAdPresent', function(data));
 * document.addEventListener('onAdDismiss', function(data));
 * document.addEventListener('onAdLeaveApp', 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:titleForAd 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:titleForAdButton 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 https://github.com/floatinghotpot/cordova-plugin-facebookads


阅读这个答案https://stackoverflow.com/a/40068196/935070 https://stackoverflow.com/a/40068196/935070

Mac Safari 的自动网页检查器导致横幅崩溃

只需禁用自动网络检查

Safari>开发>设备>自动显示 JSContext 的 Web 检查器

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Xcode 8 升级后,iOS10 应用程序崩溃,返回 malloc 错误 的相关文章

  • UIAlertAction 处理程序在延迟后运行

    我正在尝试将 UIAlertViews 更改为 UIAlertControllers 我为此设置了这个操作 UIAlertAction undoStopAction UIAlertAction actionWithTitle Undo St
  • 致命错误:在 flutter 中找不到“Flutter/Flutter.h”文件

    这是错误 在文件中包含来自 Users chetan pub cache hosted pub dartlang org webview flutter 1 0 7 ios Classes JavaScriptChannelHandler
  • 使用 Facebook API 和 Objective C 来查找随机 Facebook 用户图像

    我正在构建一个返回随机 Facebook 个人资料图片的应用程序 到目前为止 我有下面的代码生成一个随机个人资料 ID 有时会返回真实的个人资料 但有时不会 只显示通用的蓝色 Facebook 面孔 当我在实际网站图形 API 上使用给定的
  • 如何在 iOS 上更改设备音量 - 而不是音乐音量

    我想更改 iOS iPhone 上的设备音量 我知道我可以使用以下几行更改音乐库的音量 implement at first MediaPlayer framework MPMusicPlayerController musicPlayer
  • 使用 Facebook 进行身份验证的网站的 REST API

    我们有一个网站 其中only登录网站并进行身份验证的方式是使用 Facebook 这不是我的选择 当您第一次登录 Facebook 时 系统会自动为您创建一个帐户 现在 我们希望为我们的网站创建一个 iPhone 应用程序 并为其他人使用我
  • 是否可以对 UILabel 的文本颜色变化进行动画处理? [复制]

    这个问题在这里已经有答案了 UIView animateWithDuration 5 animations myLabel textColor UIColor redColor 标签文本颜色立即改变 Try this UIView tran
  • 未找到符号,预计出现在平面命名空间 ObjC++ 中

    我可能遇到了一个简单的问题 但是在编译过程中没有任何信息错误或警告来提醒我出了什么问题 我有一个 Objective C 应用程序 其中包含 C 主文件和 ObjC 头文件 它构建得很好 但是当运行时 它会给出以下错误消息 Dyld Err
  • 如何设置 UINavigationbar 的渐变颜色?

    我想设置UINavigationbar backgroundColor渐变颜色 我想通过颜色数组设置它以创建渐变 理想情况下 作为内部的可访问方法UINavigationBar将其颜色更改为此渐变 有什么建议么 除了手动设置图像作为导航栏的
  • iOS5 和 Facebook API

    我想将我的应用程序与 Facebook 集成并从 github 下载 Facebook ios sdk 但是 该 sdk 适用于 Xcode 4 0 代码库 我正在使用 Xcode 4 2 for iOS 5 beta 5 应用程序 是否有
  • 在两个可移动 uiview 之间画线

    我有一个带有节点的 滚动视图 UIViews 可以拖动 我正在尝试在选定的之间绘制边缘UIViews使用 calayer 但我不知道当视图位置发生变化时如何重新绘制线条 In my viewControllerI 类在节点数组中添加第一个和
  • UINavigationBar 滑开而不是留在原处

    我创建了演示项目来展示问题 我们在 UINavigationController 中有两个视图控制器 MainViewController这是根 class MainViewController UIViewController lazy
  • 使用基于 Cookie 的身份验证的 Capacitor iOS

    我正在使用 Capacitor v3 NextJS 静态导出和 Django 后端基于生产网站构建 iOS 应用程序 当前的后端身份验证方案通过 cookie 使用 Django 会话 并通过 cookie 设置 CSRF 令牌 应用程序可
  • 如何使用 C# SDK 更新 Facebook 访问令牌

    我正在使用 Facebook C SDK 来获取尽可能多的数据 例如帖子 评论 用户信息 尽可能来自 Facebook 但我的程序在我的访问令牌在一段时间后过期后停止 我必须重新启动程序 我从以下位置获取了访问令牌Facebook 开发者工
  • 如何在 iOS 应用程序中检测所有可用的 Wifi 网络并连接到其中之一

    在我的 iOS 应用程序中 我想检测所有可用的 wifi 网络 然后从列表中选择一个网络并连接到它 目标是不打开应用程序内置的设置来连接 Wi Fi 而是在我的应用程序中完成这一切 首先 这可能吗 如果可能的话 请指出要使用哪些框架和方法
  • 在后台继续下载

    我正在创建一个应用程序 其中我从服务器下载一些数据 在后台运行时 我希望连接继续运行 以便可以下载数据 我知道有方法应用程序委托 void applicationDidEnterBackground UIApplication applic
  • 如何在多个视图中显示相同的导航栏?

    我可以为一个视图重现以下导航栏 但是 一旦我单击按钮后移至下一个视图 我就会丢失最右边的两个图标 搜索 个人资料 据我所知 从故事板设置导航项目通常是按视图进行的 我可以为每个视图复制这些项目 但我想知道是否有更好的方法来完成一次 是否有教
  • 使用 MPMoviePlayerViewController 时的 iPad 旋转错误

    问题摘要 使用 MPMoviePlayerViewController 播放视频时更改 iPad 设备或模拟器的方向会导致视频播放器关闭时旋转状态不一致 这是 iPad SDK 3 2 中的一个已知错误 记录于http www openra
  • AGVTool new-version 和 What-version 不对应

    当我做 agvtool new version all 99 它更新我的 Info plist 文件 但是 如果我这样做 agvtool what version or agvtool next version 我收到此错误 There d
  • iOS 11 特定设置部分的 URL 方案停止工作

    我的应用程序使用 URL 方案将用户直接带到 设置 常规 关于 部分 以下 URL 在 10 3 x 中工作正常 应用程序首选项 根 常规 路径 关于 然而 这个 URL 方案在 iOS 11 GM 版本中不再有效 它仅启动 设置 应用程序
  • Swift:UICollectionViewCell didSelectItemAtIndexPath 更改背景颜色

    我可以轻松更改单元格的背景颜色CellForItemAtIndexPath method func collectionView collectionView UICollectionView cellForItemAtIndexPath

随机推荐

  • 在 makefile 中指定路径(Windows 上的 GNU make)

    我正在使用 GNU make 来构建一个使用 Microsoft Visual C 的项目 并且我希望能够从任何 CMD 窗口运行它 而不必打开预配置路径 以及各种其他环境变量 的预配置窗口通过批处理文件 理想情况下 我想在 makefil
  • 无法让 pyspark 作业在 hadoop 集群的所有节点上运行

    Summary 我无法运行我的 python spark 作业all我的 hadoop 集群的节点 我已经安装了 hadoop spark 1 5 2 bin hadoop2 6 的 Spark 启动 java Spark 作业时 负载得到
  • 如何检查 Asp.net Core MVC(又名 Asp.Net 5 RC1)中的响应 cookie?

    我正在将 Web 表单应用程序转换为 asp net core mvc 在我的 Web 表单应用程序中 有时在我设置一些响应 cookie 后 其他代码需要查看它们是否已设置 如果是 则访问 cookie 的属性 即值 过期 安全 http
  • 在 Powershell 中删除重复的 XML 节点组

    我有一个 XML 文件 由于重新运行脚本和文件夹结构 该文件可能包含重复的包元素 请参阅示例 XML 中的最后两个包 现在我需要一个 Powershell 函数来删除所有重复的包 在这种情况下 重复项是由制造商 名称 版本 文件名和执行版本
  • 如何从 CPAN 安装“Thread::Pool”?

    我在用着cpanm安装 Perl 模块 但我无法安装Thread Pool因为某些原因 sudo cpanm Thread Pool 失败并且日志文件显示 cpanm App cpanminus 1 0012 on perl 5 01000
  • Bottle.py 错误路由

    Bottle py 附带了一个导入来处理抛出 HTTPError 并路由到函数 首先 文档声称我可以 几个例子也是如此 from bottle import error error 500 def custom500 error retur
  • 您能识别出这个带有复选框的多选下拉列表吗?

    I m looking for this control which is definitely not stock It s on a website that I won t link so people don t think I m
  • 如何使用 parse.com 服务器 iOS 保存对象数组?

    我正在使用 parse com 服务器发送和检索我的 iOS 应用程序数据 我想保存歌曲列表 每首歌曲都有以下属性 标题 艺术家 专辑 我的代码片段在这里 IBAction saveSongsData id sender PFObject
  • 如何从 RAM 中完全解析压缩文件?

    背景 我需要解析一些各种类型的 zip 文件 出于某种目的获取一些内部文件内容 包括获取它们的名称 有些文件无法通过文件路径访问 因为 Android 有 Uri 来访问它们 并且有时 zip 文件位于另一个 zip 文件内 随着使用 SA
  • 我怎样才能让阴谋集团安装酸性状态?

    我是 Haskell 的新手 想尝试酸性状态库 但在尝试安装它时得到以下输出 gt cabal install acid state Resolving dependencies Configuring acid state 0 7 5 B
  • SSIS - 创建日期时间的脚本问题

    我正在使用 SSIS 将数据从 CSV 文件上传到数据库中的表 我尝试获取 2 个字符串 一个用于日期 另一个用于时间 并将它们连接起来 如下所示 string datsDateTime String Concat Row DATE Row
  • 使用 CSS 制作窄字符

    如何使用 CSS 减少类似 Arial 字体的字符宽度 您无法减少字符宽度 但可以减少字母间距 span letter spacing 0px
  • 与图片框一起移动按钮 vb/c#

    我正在开发映射的 DVR cctv UI 我自己做的 所以没有使用google的API 我只是在需要的地方切掉了地图的大部分 所以 如果我确实有一个非常大的地图 那么它不适合我的电脑分辨率 我还没有找到在图片框中移动图片的代码 但我所做的是
  • 如何更新特定的 XElement?

    更新 XElement 的最佳方法是什么 更新元素 Pen 的 itemNumber 的值 在此 XML 中
  • 使用gradle中的参数运行jar

    我想在我的 gradle 脚本中运行一个参数位于 C Users nwuser FitNesse fitnesse standalone jar 的 jar 文件 我知道如何在没有参数的情况下做到这一点 apply plugin java
  • SwiftUI - 按钮 - 如何将函数(带参数)请求从子级传递给父级

    我已经知道如何从子函数调用父函数 但是如果我的父函数有参数我应该做什么 我想不通 不带参数的工作代码 struct ChildView View var function gt Void var body some View Button
  • React Native,从其他文件传递变量

    我是本机反应新手 并且在将变量从一个文件传递到另一个文件时遇到问题 module exports 在传递类时效果很好 但是 本机有没有办法通过导出将变量从一个文件传递到另一个文件 在下面的示例中 一个文件 按钮 正在创建一个随机数数组 我想
  • 使用 Cocoa 中的 xsd 文件验证 XML 架构?

    我在本地 xsd 文件中有一些 XML 和 XML 架构 XML 文档不包含任何架构信息 我想根据 Cocoa 中的 xsd 模式文件验证 XML 文档 这意味着我更喜欢基于 NS CF libxml 的东西 而不是外部库 我可以跨越xml
  • NodeJS将64位无符号整数写入缓冲区

    我想以大端格式将 64 位 8 字节 大整数存储到 nodejs 缓冲区对象中 此任务的问题是 nodejs 缓冲区仅支持写入 32 位整数作为最大值 使用 buf write32UInt32BE value offset 所以我想 为什么
  • Xcode 8 升级后,iOS10 应用程序崩溃,返回 malloc 错误

    我最近升级到了 iOS10 和 Xcode 8 之后一些以前可以工作的代码现在不再工作了 当代码运行时 应用程序崩溃并在控制台中显示以下错误消息 malloc 对象 0x1700bea80 的错误 正在释放的指针未分配 在malloc er