Re: What's the best way to run an NSURLProtocol session?
Re: What's the best way to run an NSURLProtocol session?
- Subject: Re: What's the best way to run an NSURLProtocol session?
- From: Daryle Walker <email@hidden>
- Date: Mon, 20 Oct 2014 18:57:22 -0400
On Oct 20, 2014, at 6:47 PM, Daryle Walker <email@hidden> wrote:
> Over the weekend, I read the Programming Guide corresponding to NSThread. I just used one of the -performSelector: APIs. Easier than I anticipated, except for the fact the code isn’t working right now. (That’s on the general Cocoa list. Should I ask here too?)
Here’s a copy of that post, called “Can't get first try of NSURLProtocol subclass to work.”:
> I entered a URL that triggers my handler, but I get this from the Xcode debug log:
>
>> 2014-10-20 07:42:08.968 MyApp[94134:303] *** Assertion failure in -[NSWindow setTitle:], /SourceCache/AppKit/AppKit-1265.21/AppKit.subproj/NSWindow.m:2901
>> 2014-10-20 07:42:08.972 MyApp[94134:303] *** WebKit discarded an uncaught exception in the webView:didFinishLoadForFrame: delegate: <NSInternalInconsistencyException> Invalid parameter not satisfying: aString != nil
>
> Here’s my -startLoading method. I tried “about:”, which is the only URL I handle directly in the method.
>
>> - (void)startLoading {
>> NSAssert([self.class canInitWithRequest:self.request], @"Inappropriate request.");
>> NSAssert(!self.processing, @"Receiving new protocol request while processing another.");
>>
>> // Handle the blank "about:" URL.
>> NSString * const path = self.request.URL.path;
>> NSString * const query = self.request.URL.query;
>>
>> if (!path || [path isEqualToString:@""]) {
>> if (query) goto error;
>> NSStringEncoding const encoding = NSUTF8StringEncoding;
>> NSData * const aboutData = [@"<html><head><title>about</title></head><body>about:</body></html>" dataUsingEncoding:encoding];
>>
>> [self.client URLProtocol:self didReceiveResponse:[[NSURLResponse alloc] initWithURL:self.request.URL MIMEType:@"text/html" expectedContentLength:aboutData.length textEncodingName:nil/*(__bridge_transfer NSString *)CFStringConvertEncodingToIANACharSetName(CFStringConvertNSStringEncodingToEncoding(encoding))*/] cacheStoragePolicy:NSURLCacheStorageNotAllowed];
>> [self.client URLProtocol:self didLoadData:aboutData];
>> [self.client URLProtocolDidFinishLoading:self];
>> } else {
>> NSString * const handler = AboutKeyToSelectorMap()[path];
>>
>> if (handler) {
>> self.processing = [NSThread currentThread];
>> self.cancelled = NO;
>> [self performSelector:NSSelectorFromString(handler) withObject:query afterDelay:0.0 inModes:@[[NSRunLoop currentRunLoop].currentMode, NSDefaultRunLoopMode]];
>> } else {
>> goto error;
>> }
>> }
>> return;
>>
>> error:
>> // Bad response.
>> [self.client URLProtocol:self didFailWithError:[NSError errorWithDomain:NSURLErrorDomain code:NSURLErrorResourceUnavailable userInfo:nil]];
>> }
>
> I thought using “nil” instead of the big expression calculating the encoding string would make a difference. It didn’t.
—
Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT mac DOT com
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Macnetworkprog mailing list (email@hidden)
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden