【发布时间】:2019-03-28 14:18:15
【问题描述】:
在我的 Objective-C、iPhone 应用程序中,我成功使用了 NSURLSession,我的应用程序开始崩溃,并出现以下 iOS 12 错误:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[NSConcreteMapTable dataTaskWithRequest:completionHandler:]:无法识别的选择器发送到实例
获取令牌 ==>
+ (NSURLSession *)sharedSessionManager
{
static NSURLSession *session = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
[sessionConfiguration setHTTPAdditionalHeaders:@{
@"Accept": @"application/json"
}
];
session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:nil delegateQueue:nil];
});
return session;
}
为所有未来调用获取保存的令牌 ==>
+ (NSURLSession *)sharedAsyncSessionManager
{
NSString *authToken = [NSString stringWithFormat: @"Bearer %@", m_strToken];
static NSURLSession *session = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
NSURLSessionConfiguration *sessionConfiguration =[NSURLSessionConfiguration defaultSessionConfiguration];
[sessionConfiguration setHTTPAdditionalHeaders:@{
@"Content-Type": @"application/json",
@"Authorization": authToken}
];
session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:nil delegateQueue:nil];
});
return session;
}
调用 API ==>
NSURLSession *sessionMnger = [SessionManager sharedAsyncSessionManager];
NSURLSessionDataTask *task = [sessionMnger dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
{
NSMutableArray *arrTemp = [[NSMutableArray alloc]init];
}
iOS 12 中 dataTaskWithRequest 的应用程序崩溃。错误消息如下所示:
由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:'-[NSConcreteMapTable dataTaskWithRequest:completionHandler:]:无法识别的选择器发送到实例
当我想用上面的 sessionMnger 应用程序崩溃调用 API 时......
iOS 12 中缺少什么?
【问题讨论】:
-
看起来像内存管理问题,尝试启用“僵尸对象”并再次运行以查看它显示的内容。 (产品->方案->编辑方案->“运行”->诊断子选项卡
-
我做了同样的事情,应用程序在同一行崩溃。 NSURLSessionDataTask *task = [sessionManger dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) with message [__NSURLSessionLocal dataTaskWithRequest:completionHandler:]: message sent to deallocated instance 0x100c878c0
-
好的,这很好(有点,启用“僵尸对象”不应该修复它,但揭示崩溃的原因)。所以你的 sessionMnger 被提前释放了。我看不出你的代码是怎么发生的。您确定您没有遗漏代码 sn-ps 中的相关内容吗?这两条线(您获得 sessionMnger 并使用它的那条线)是否相互跟随,中间没有任何东西?
-
您好,非常感谢您的帮助,我已将 -fno-objc-arc(构建阶段)添加到 SessionManager 类。一旦我删除它,它就会保留全局会话(现在基本测试工作正常。)。太感谢了。能否请您添加为答案,我会投票,以便对其他人有所帮助。
标签: objective-c iphone ios12