2008-10-08 9 views
40

El método de clase para crear una ruta de índice con uno o más nodos es:Cómo crear los "índices" necesarios para NSIndexPath: indexPathWithIndexes: longitud:

+ (id)indexPathWithIndexes:(NSUInteger *)indexes length:(NSUInteger)length 

¿Cómo creamos los "índices" requeridas en el primer parámetro?

La documentación lo listó como Matriz de índices para componer la ruta de índice pero está esperando un (NSUinteger *).

Para crear una ruta de índice de 1.2.3.4, ¿es simplemente una matriz de [1,2,3,4]?

Respuesta

59

Usted está correcto. Es posible utilizar de esta manera:

NSUInteger indexArr[] = {1,2,3,4}; 

NSIndexPath *indexPath = [NSIndexPath indexPathWithIndexes:indexArr length:4]; 
+0

lo siento por la pregunta de novato: ¿necesito [indexSet versión] después de su uso? – Steve

+4

@Steve No en este caso. Encontrará la respuesta a esto y todos los problemas de administración de memoria relacionados con Cocoa en la Guía de programación de administración de memoria para Cocoa (http://developer.apple.com/mac/library/documentation/cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html) . Como 'indexPathWithIndexes: length' no tiene 'new', 'copy', o 'alloc' en el selector, las reglas de Cocoa especifican que devuelve una instancia liberada automáticamente. –

7

Supongo que es correcto. Es tan simple como una matriz C de NSUInteger. El parámetro de longitud es la cantidad de elementos en la matriz de índices.

Las matrices en C a menudo se identifican como un puntero (en este caso NSUInteger *) con un parámetro de longitud o un terminador conocido como \ 0 para cadenas C (que es solo una matriz char).

44

En iOS, también se puede utilizar este método de NSIndexPath UIKit Additions (declarada en UITableView.h):

+ (NSIndexPath*) indexPathForRow:(NSUInteger)row inSection:(NSUInteger)section 
+0

Aha! Documentación (de tipo) para la "API no documentada" sobre la que pregunté en otra Q. ¡Gracias! :) – Olie

+2

está muy bien documentado: http://developer.apple.com/iphone/library/documentation/uikit/reference/NSIndexPath_UIKitAdditions/Reference/Reference.html, sin embargo, solo está disponible en el iphone (UIKit). – Intentss

+0

Este método se declara en NSIndexPath, no en UITableView. – Matjan

3

hice esto en 2 líneas de código

NSMutableArray *indexPaths = [[NSMutableArray alloc] init]; 
for (int i = firstIndexYouWant; i < totalIndexPathsYouWant; i++) [indexPaths addObject:[NSIndexPath indexPathForRow:i inSection:0]]; 

Corto, limpio y legible. Código gratuito, no lo golpees.

+0

romperé las 2das líneas en múltiples lastima mis ojos –

Cuestiones relacionadas