2009-03-11 7 views
7

Estoy seguro de que estoy haciendo algo tonto, pero esto me está volviendo loco.NSMutableContacto de matriz siempre devuelve cero

Estoy intentando recorrer los resultados de la base de datos, crear objetos a partir de esos resultados y agregar los objetos a un NSMutableArray. He verificado a través de NSLog llama a que los datos se están leyendo correctamente de la base de datos y copia en el objeto, pero el recuento para la NSMutableArray siempre devuelve 0.

Esto es la esencia del código:

while ([rs next]) { 

    Kana *htemp = [Kana alloc]; 

    htemp.content = [rs stringForColumn:@"hiragana"]; 
    [hiragana addObject:htemp]; 

} 
NSLog(@"Hiragana contains %d objects", [hiragana count]); 

Kana se deriva de NSObject, y hiragana es una instancia de NSMutableArray.

Estoy seguro de que este es un error de novato, y espero que alguien me pueda aclarar. TIA! :)

Respuesta

39

Supongo que, a juzgar por el código que ha publicado, es probable que no esté asignando correctamente su matriz. Al crear objetos, necesita inicializarlos también. Por lo tanto, la siguiente:

Kana *htemp = [Kana alloc]; 

debe ser: necesitan ser inicializado esta manera

Kata *temp = [[Kana alloc] init]; 

Todos los objetos. Por lo tanto, si estoy en lo correcto y no se ha inicializado la matriz, a continuación, su creación tiene que ir de esta:

NSMutableArray *hiragana = [NSMutableArray alloc]; 

a esto:

NSMutableArray *hiragana = [[NSMutableArray alloc] init]; 

Por razones de optimización, probablemente debería también especificar una capacidad inicial así si tiene alguna idea de la cantidad de objetos que pudieran contener:

[[NSMutableArray alloc] initWithCapacity:someNumber]; 
+0

su respuesta es buena: también debe incluir los consejos que se mencionan a continuación para liberar el objeto htemp después de agregarlo a la matriz, o si no es una gran pérdida de memoria. – danielpunkass

+0

gracias por esta pregunta y respuesta ... ¡me ayuda! (n_n) –

0

algunas cosas:

  1. ¿Qué ocurre si se pone una llamada NSLog dentro del bucle while? Verifique que las iteraciones de bucle realmente están sucediendo antes de culparlo en la matriz.
  2. ¿Dónde está creando la matriz hiragana? Si lo haces incorrectamente por alguna razón y la matriz es nula, podría causar problemas como este.
  3. Si no tiene recogida de basura activada, asegúrese de realizar [htemp release] después de agregarla al ciclo. addObject se conserva y cada elemento agregado se fugará del bucle. De nuevo, esto solo es relevante si la recolección de basura está desactivada.

Lo más probable es que no haya creado correctamente la matriz o rs no contenga lo que espera que contenga, por lo que [rs next] no se llamará nunca (si rs es nulo, para ejemplo, no se ejecutarán iteraciones de este bucle y no tendría ningún tipo de error).

+0

Ahh ... ¡fue una inicialización de matriz incorrecta FTW! :) ¡Gracias! –

2

Otra causa común (no en su caso, como resulta ser, pero Gener ally) está olvidando incluso asignar la matriz. Si aún no ha creado una matriz, está enviando ese mensaje count al nil, por lo que el resultado siempre será 0.

Cuestiones relacionadas