Es posible el uso de una rápida enumeración con un NSArray que contiene un NSDictionary?

Estoy corriendo a través de algunos de Objective C tutoriales, y el siguiente código patadas de la consola en el modo GDB

NSMutableArray *myObjects = [NSMutableArray array];
NSArray *theObjects = [NSArray arrayWithObjects:@"easy as 1",@"easy as two", @"Easy as Three"];
NSArray *theKeys    = [NSArray arrayWithObjects:@"A",@"B",@"C"];    
NSDictionary *theDict = [NSDictionary dictionaryWithObjects:theObjects forKeys:theKeys];
[myObjects addObject:theDict];

for(id item in myObjects)
{
    NSLog(@"Found an Item: %@",item);
}

Si puedo reemplazar la rápida enumeración de bucle con una tradicional conteo de bucle

int count = [myObjects count];
for(int i=0;i<count;i++)
{
    id item;
    item = [myObjects objectAtIndex:i];
    NSLog(@"Found an Item: %@",item);
}

La aplicación se ejecuta sin un accidente, y el diccionario de la salida a la ventana de la consola.

Esta es una limitación de la Rápida Enumeración, o me estoy perdiendo algunos sutilmente de la lengua? Hay otras trampas cuando anidación colecciones como esta?

Para puntos de bonificación, ¿cómo podría utilizar GDB para depurar a mí mismo?

OriginalEl autor Alan Storm | 2010-02-19

1 Comentario

  1. 11

    ¡Uy! arrayWithObjects: debe ser nulo de terminación. El siguiente código se ejecuta bien:

    NSMutableArray *myObjects = [NSMutableArray array];
    NSArray *theObjects = [NSArray arrayWithObjects:@"easy as 1",@"easy as two", @"Easy as Three",nil];
    NSArray *theKeys    = [NSArray arrayWithObjects:@"A",@"B",@"C",nil];    
    NSDictionary *theDict = [NSDictionary dictionaryWithObjects:theObjects forKeys:theKeys];
    [myObjects addObject:theDict];
    
    for(id item in myObjects)
    {
        NSLog(@"Found an Item: %@",item);
    }

    No estoy seguro de por qué el uso de un tradicional bucle hid este error.

    Ah, uno de mis favoritos Cisms. «Lo que usted pensó que estaba trabajando correctamente no debería haber sido». Gracias por el novato consejos!
    Si usted enciende -Wformat («- comprobación de tipo de llamadas a printf/scanf» en Xcode), el compilador le advertirá acerca de esto. Si también activa -Werror («Tratar las Advertencias o Errores» en Xcode), el compilador generará un error de compilación a través de este error.
    Gracias Pedro, muy útil!

    OriginalEl autor andyvn22

Dejar respuesta

Please enter your comment!
Please enter your name here