令我感到困惑。我已经在NSURLConnection
上隐藏了类方法而没有任何问题,但我仍然坚持使用+[NSURLSession sessionWithConfiguration:delegate:delegateQueue:]
。
我甚至尝试使用class_copyMethodList (object_getClass([NSURLSession class]), &count);
记录所有类方法,并且类方法实际上存在:
sessionWithConfiguration:delegate:delegateQueue:
initialize
奇怪的是钩子确实被调用了所以我认为我们做对了。调用%orig()
并仅将参数传递给产生:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSURLSession sessionWithConfiguration:delegate:delegateQueue:]: unrecognized selector sent to class 0x1919932b8'
这里是钩子:
+ (NSURLSession *)sessionWithConfiguration:(NSURLSessionConfiguration *)configuration
delegate:(id<NSURLSessionDelegate>)delegate
delegateQueue:(NSOperationQueue *)queue
{
NSURLSession *origResult = %orig(configuration, delegate, queue);
return origResult;
}
我错过了什么吗?
设置详情: rpetrich's Theos Mac OS X 10.9.5 iPad Air 1 iOS 7.1.2
答案 0 :(得分:0)
试试这段代码......
+ (NSURLSession *) sessionWithConfiguration: (NSURLSessionConfiguration *) configuration delegate: (id) delegate delegateQueue: (NSOperationQueue *) queue
{
NSURLSession * session = [ NSURLSession SessionWithConfiguration : Configuraion
delegate : self
DelegateQueue : nil ];
}
delegateQueue指定NSOperationQueue。如果你的代码需要delegateQueue而不是nil,你应该声明队列。
答案 1 :(得分:0)
此处的问题与NSURLSession being a class cluster有关。虽然OP中的代码成功地挂接了类方法,但%orig
需要调用实际的类名。所以为了使它工作,这个钩子必须放在%hook __NSCFURLSession
下面。对于您的案例,真实的班级名称可能会有所不同。