0

在玩 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");
    }
}

我的代码有什么问题吗?

4

1 回答 1

1
NSMutableURLRequest *newRequest = [self.request mutableCopy];

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

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

[NSURLProtocol setProperty:@YES forKey:@"URLProtocolHandledKey" inRequest:self.request];
于 2014-05-23T09:23:20.190 回答