【问题标题】:Convert delegate to static function将委托转换为静态函数
【发布时间】:2014-06-09 02:45:11
【问题描述】:

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

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-connection:didReceiveAuthenticationChallenge: 添加一些代码

问题是我需要 NSURLConnection 的委托来进行回调,而我知道如何做到这一点的唯一方法是使用另一个单独的对象。

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

【问题讨论】:

    标签: objective-c cocoa delegates


    【解决方案1】:

    您不必为一门课程提供一个文件。您可以在 main.m 中添加类

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

    【讨论】:

    • 再次感谢 vikingosegundo。您对NSRunLoop 的看法是正确的。
    【解决方案2】:

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

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

    【讨论】:

    • 再次感谢乔希。我按照您和 vikingosegundo 提供的材料进行了操作,并认为它涉及太多了。我崩溃了,又添加了几个源文件给代理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 2014-10-13
    • 1970-01-01
    相关资源
    最近更新 更多