2012-10-06 62 views
5

Cuando uso un UICollectionView, estoy perplejo al obtener el valor indexPath del método didSelectItemAtIndexPath.indexPath Valor de UICollectionView

estoy usando la siguiente línea de código en el método didSelectItemAtIndexPath:

//FileList is an NSArray of files from the Documents Folder within my app. 
//This line gets the indexPath of the selected item and finds the same index in the Array 
NSString *selectedItem = [NSString stringWithFormat:@"%@",[FileList objectAtIndex:indexPath.item]]; 

//Now the selected file name is displayed using NSLog 
NSLog(@"Selected File: %@", selectedItem); 

El problema es que el indexPath siempre devuelve 0 (véase a continuación Código) y como resultado sólo el primer elemento el FileList NSArray siempre se selecciona.

He intentado diferentes parámetros tales como

  • indexPath.row
  • indexPath.item
  • y simplemente indexPath

TODAS estas devuelven un valor de 0 en la siguiente declaración NSLog:

NSLog(@"index path: %d", indexPath.item); //I also tried indexPath.row here 

Tal vez estoy formateando el NSString incorrectamente, sin embargo, no creo que este sea el caso, ya que no hay advertencias y he intentado formatearlo de manera diferente en otros lugares.

¿Por qué el indexPath siempre devuelve 0?

¡Cualquier ayuda sería apreciada! ¡Gracias!

+1

Por favor, muestre cómo formatea las cadenas para 'NSLog' – dasblinkenlight

+0

' .item' es la propiedad apropiada aquí, pero funcionalmente esto no es diferente de '.row'. Necesita mostrar más, ¿cómo sabe que es cero? ¿Qué es FileList? – jrturton

+0

He editado la pregunta e incluido cómo formateo la cadena para NSLog y he aclarado qué es FileList (lea el código comentado) –

Respuesta

1

El método delegado que está utilizando siempre proporciona la ruta de índice de la celda que se seleccionó. Intente depurar con un punto de interrupción en su llamada NSLog. Cuando el depurador se detiene, mire el Área de depuración en la parte inferior y use la consola (Ver => Área de depuración => Activar consola si la necesita).

Type en la consola: po indexPath

debería ver algo como esto si el elemento seleccionado es el quinto de la lista de la sección: 0 (primera sección y probablemente el único)

<NSIndexPath 0xa8a6050> 2 indexes [0, 5]

Espero que esto ayude a descubrir qué está pasando.

30

A riesgo de afirmar lo obvio, asegúrese de que su código esté en el método didSelectItemAtIndexPath en lugar de didDeselectItemAtIndexPath. Obtendrá valores de indexPath muy diferentes para un evento táctil dado en el último método y es bastante fácil insertar uno incorrecto con la finalización del código de Xcode.

+2

Amigo, me salvaste. Estuve depurando durante una hora, gracias. –

+2

Esto me sorprendió dos veces. Grrr ... – malaki1974

+2

Maldita sea, autocompleta – DaGaMs

Cuestiones relacionadas