2010-11-03 11 views
13

Tengo un problema porque estoy tratando de cargar un archivo de sonido mientras el usuario se mueve alrededor de un UIScrollView ... El problema es que estoy usando NSURLRequest para poder cargar el fondo, pero incluso entonces se niega a cargar realmente hasta que UIScrollView haya dejado de desplazarse. :(NSURLRequest no se activará mientras UIScrollView se está desplazando

¿Hay algo que pueda hacer al respecto?

Gracias!

Respuesta

27

El NSURLRequest sólo gestiona la solicitud, no la conexión real.

eventos táctiles, como el desplazamiento se coloque la carrera bucle en NSEventTrackingRunLoopMode. Por defecto, un NSURLConnection está programado para única ejecutar en NSDefaultRunLoopMode. Así, mientras que en NSEventTrackingRunLoopMode, NSDefaultRunLoopMode está bloqueada.

La buena noticia es que puede programar modos adicionales para un NSURLConnection, como NSRunLoopCommonModes.

connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO]; 
[connection scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; 
[connection start]; 
+0

Gracias por este ... Me salvó un enorme dolor de cabeza! :-) ¿cuál es la diferencia entre NSEventTrackingRunLoopMode y NSRunLoopCommonModes? – jowie

+1

AFAIK, una conexión que está programada en NSRunLoopCommonModes será supervisada por todos los bucles de ejecución. Si estuviera programado en NSEventTrackingRunLoopMode, solo se supervisaría mientras hay eventos táctiles. http://developer.apple.com/library/ios/documentation/cocoa/reference/foundation/Classes/NSRunLoop_Class/Reference/Reference.html#//apple_ref/doc/uid/20000321-CJBJABGH – tidwall

1

que he descubierto la manera dura que si se llama startImmediately: SÍ o ommit esta segunda línea de parámetro es completamente inútil. Así que asegúrese de seguir el patrón exacto provisto por @tidwall.

Aquí también un ejemplo rápido:

self.connection = NSURLConnection(request: self.request, delegate: self, startImmediately:false) 
self.connection?.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes) 
self.connection?.start() 
Cuestiones relacionadas