将委托转换为静态函数

时间:2014-04-24 01:45:09

标签: objective-c cocoa delegates

我正在尝试开发一个简单的,一个文件的概念证明。代码如下:

int main(int argc, const char *argv[])
{
    NSString* requestString = @"https://www.example.com";
    NSURL* requestUrl = [NSURL URLWithString:requestString];

    NSURLRequest* request = [NSURLRequest requestWithURL:requestUrl
                                             cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
                                         timeoutInterval:10.0f];

    NSURLConnection* connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

    return 0;
}

通过HTTPS向example.com的请求使用私有CA,因此我需要信任该CA.为了信任该CA,我需要向NSURLConnectionDelegate的{​​{1}}

添加一些代码

问题是我需要-connection:didReceiveAuthenticationChallenge:的回调代理,而我知道如何做的唯一方法是使用另一个单独的对象。

是否可以将委托扁平化为静态函数,以便将所有代码保存在单个文件中?

2 个答案:

答案 0 :(得分:3)

你不必为一个班级拥有一个文件。你可以在main.m中添加类

但是你会发现另一个问题:你的代码会执行得太快以至于NSURLConnection没有足够的时间等待任何事情返回。您可以添加NSRunLoop 1 2

答案 1 :(得分:2)

不可能做你真正要求的事情; NSURLConnction 必须将对象作为其委托,因为它将从委托协议向该对象发送特定消息。功能无法响应消息。 (但是,没有理由不能在此文件中定义委托类。)

creating on-the-spot delegates有一些您可能觉得有用的选项,在这种特殊情况下,您可以使用+sendSynchronousRequest:returningResponse:error: