You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
工程接入AFNetworking,同时使用NSURLSessionDownloadTask,在iOS8下面会崩溃
Log
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFLocalDownloadTask _hawkeye_swizzle_e8dba47d_resume]: unrecognized selector sent to instance 0x103c0440'
Describe the bug
工程接入AFNetworking,同时使用NSURLSessionDownloadTask,在iOS8下面会崩溃
Log
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFLocalDownloadTask _hawkeye_swizzle_e8dba47d_resume]: unrecognized selector sent to instance 0x103c0440'
Last Exception Backtrace:
0 CoreFoundation 0x28634f87 0x2852d000 + 1081223
1 libobjc.A.dylib 0x35c57c77 0x35c51000 + 27767
2 CoreFoundation 0x2863a37d 0x2852d000 + 1102717
3 CoreFoundation 0x28638259 0x2852d000 + 1094233
4 CoreFoundation 0x28569d68 0x2852d000 + 249192
5 MTHawkeye 0x054c81cb __54+[MTHNetworkObserver injectIntoNSURLSessionTaskResume]_block_invoke_2 (MTHNetworkObserver.m:256)
6 MTHawkeye 0x054c81cb __54+[MTHNetworkObserver injectIntoNSURLSessionTaskResume]_block_invoke_2 (MTHNetworkObserver.m:256)
7 MTHawkeye 0x054c81cb __54+[MTHNetworkObserver injectIntoNSURLSessionTaskResume]_block_invoke_2 (MTHNetworkObserver.m:256)
8 ThirdBase 0x059077d9 -[_AFURLSessionTaskSwizzling af_resume] (AFURLSessionManager.m:456)
Additional context
使用[AFURLSessionManager downloadTaskWithRequest:progress:destination:completionHandler]得到NSURLSessionDownloadTask,这是个类簇,实际得到__NSCFLocalDownloadTask,调用resume的时候崩溃 。
继承关系如下:
iOS8:__NSCFLocalDownloadTask -> __NSCFLocalSessionTask -> NSURLSessionTask;
iOS8以上:__NSCFLocalDownloadTask -> __NSCFLocalSessionTask -> __NSCFURLSessionTask-> NSURLSessionTask;
在MTHNetworkObserver中(大概240行左右),通过NSURLSessionDownloadTask拿到的是__NSCFLocalDataTask(继承关系和__NSCFLocalDownloadTask同一个层级 )。你们处理了iOS8以上的直接用__NSCFURLSessionTask及更底层的NSURLSessionTask进行方法交换. iOS8及已下没处理。
Question
1.是否特意这样处理(用硬编码的方式进行处理)。如果是的话,修改方法:在iOS的情况下,currnetClass = NSStringFromString("__NSCFLocalSessionTask")
2.是否想hook对应的resume方法,插入对应的MT框架的代码,如果是的话可以尝试AFURLSessionManager的方式。(我看了代码AFURLSessionManager的代码,和你们的处理逻辑相仿,但是不明白为什么写到后面的方法交换没有用AF那套逻辑,我试了改写代码用AFNetworking这套逻辑是可以正常工作的)
很多地方可能有错误,请指正。
The text was updated successfully, but these errors were encountered: