NSURLRequest won't fire while UIScrollView is scrolling
Asked Answered
Q

2

13

I have a problem in that I am trying to background load a sound file while the user moves around a UIScrollView... The problem is that I am using NSURLRequest so I can load in the background, but even then it refuses to actually load until the UIScrollView has stopped scrolling. :(

Is there anything I can do about this?

Thanks!

Quezada answered 3/11, 2010 at 19:13 Comment(0)
F
27

The NSURLRequest only manages the request, not the actual connection.

Touch events such as scrolling will place the run loop into NSEventTrackingRunLoopMode. By default, an NSURLConnection is scheduled to only execute in NSDefaultRunLoopMode. So while in NSEventTrackingRunLoopMode, NSDefaultRunLoopMode is blocked.

Good news is that you can schedule additional modes for an NSURLConnection, such as NSRunLoopCommonModes.

connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
[connection start];
Fount answered 3/11, 2010 at 19:33 Comment(2)
Thanks for this... Saved me a huge headache! :-) what is the difference between NSEventTrackingRunLoopMode and NSRunLoopCommonModes?Quezada
AFAIK, a connection that is scheduled in NSRunLoopCommonModes will be monitored by all run loops. If it were scheduled in NSEventTrackingRunLoopMode, then it would only be monitored while there are touch events. developer.apple.com/library/ios/documentation/cocoa/reference/…Fount
N
1

I've figured out the hard way that if you call startImmediately:YES or ommit this parameter second line is completely useless. So be sure to follow the exact pattern provided by @tidwall.

Here's also a swift example:

self.connection = NSURLConnection(request: self.request, delegate: self, startImmediately:false)
self.connection?.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes)
self.connection?.start()
Nicolella answered 22/5, 2015 at 11:57 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.