【问题标题】:iOS:[NSURLProtocol propertyForKey:inRequest:] return niliOS:[NSURLProtocol propertyForKey:inRequest:] return nil
【发布时间】:2014-05-23 09:12:57
【问题描述】:

在使用 NSURLProtocol 时,我发现 [NSURLProtocol propertyForKey:inRequest:]stopLoading 中总是返回 nil,但对于 canInitWithRequest: 效果很好

+ (BOOL)canInitWithRequest:(NSURLRequest *)request
{
    if ([NSURLProtocol propertyForKey:@"URLProtocolHandledKey" inRequest:request]) {
        return NO;
    }

    return YES;
}
- (void)startLoading
{
    NSMutableURLRequest *newRequest = [self.request mutableCopy];
    [NSURLProtocol setProperty:@YES forKey:@"URLProtocolHandledKey" inRequest:newRequest];
}

- (void)stopLoading
{
    if ([NSURLProtocol propertyForKey:@"URLProtocolHandledKey" inRequest:self.request]) {
        NSLog(@"Logging");
    }
}

我的代码有什么问题吗?

【问题讨论】:

    标签: ios request nsurlprotocol


    【解决方案1】:
    NSMutableURLRequest *newRequest = [self.request mutableCopy];
    

    您在这里创建新对象并设置它的属性,而您期望在其他实例中使用该属性,这不是正确的方法。

    将您的self.request 设为 NSMutableURLRequest`,以便您可以直接传递它。例如

    [NSURLProtocol setProperty:@YES forKey:@"URLProtocolHandledKey" inRequest:self.request];
    

    【讨论】:

    • 这取决于您传递的请求以及您对 canInitWithRequest 的期望?您确定根据 URLProtocolHandledKey 键返回正确的值吗?
    • 是的,在canInitWithRequest:中返回NO,否则会一直调用startLoading
    • self.request 是 NSURLProtocol 的内部属性
    • @keywind 你在 startLoading: 方法中还做了什么?
    猜你喜欢
    • 1970-01-01
    • 2020-11-06
    • 2016-06-15
    • 2012-06-07
    • 2015-04-15
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    相关资源
    最近更新 更多