添加块调用到NSArray?

时间:2015-03-25 14:58:50

标签: ios handler objective-c-blocks

我使用此代码拦截类“NSURLConnection”的方法“sendAsynchronousRequest”,并尝试在完成处理程序中执行一些代码。

 void (*oldHandler)(id,NSURLResponse*, NSData*, NSError*);

 void myHandler(id block, NSURLResponse *response, NSData *data, NSError *error ) {
       NSLog( @"myHandler: %@ %@", response, error );
       oldHandler( block, response, data, error );
}

…

[object_getClass([NSURLConnection class]) beforeSelector:@selector(sendAsynchronousRequest:queue:completionHandler:)
    callBlock:^( NSURLConnection *url, SEL _cmd, id request, NSOperationQueue *queue, id handler ) {
        struct _block {
            Class isa;
            int flags;
            int reserved;
            void (*invoke)();
        } *blockHandler = (__bridge struct _block *)handler;

        oldHandler = blockHandler->invoke;
        blockHandler->invoke = myHandler;
    }];

问题是,如果我在我的应用程序中连续调用了2次“sendAsynchronousRequest”,我将放弃第一次调用,因为“oldHandler”将随着方法的第二次调用而改变。

我尝试将oldHandler添加到NSArray或NSDictionary中以识别“myHandler”方法中的每个调用,但它不起作用。

你知道我的问题的解决方案吗?

由于

0 个答案:

没有答案