Pregunta

Tengo un problema con la vista de tabla en iPhone. No puedo entender por qué se bloquea cada vez que lo hará aquí es el código

   - (void)viewDidLoad
{
     [self checkAndCreatePList];
    NSMutableDictionary* plistDict = [[NSMutableDictionary alloc] initWithContentsOfFile:pListPath];

    self.animals = [plistDict objectForKey:@"Animals"];



         [super viewDidLoad];

}



    -(UITableViewCell *) tableView:(UITableView *) tableView cellForRowAtIndexPath:(NSIndexPath *) indexPath
{
    static NSString *SimpleTableIdentifier =@"SimpleTableIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
    if(cell== nil){
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SimpleTableIdentifier]autorelease];
    }
    NSUInteger row = [indexPath row];

    cell.textLabel.text = [animals objectAtIndex:row];

    return cell;
}

Se bloquea en la línea Cell.textLabel.Text = [Animals ObjectatIndex: Row]; y me dice que terminar la aplicación debido a la excepción no captura 'nsinvalidarGumentException', razón: '-[__ nscfdictionary objetatAdEx:]: selector no reconocido enviado a instancia

¿Fue útil?

Solución

los Animals La clave en su Plist se refiere a un diccionario, no a una matriz. Los diccionarios no tienen una orden garantizada, por lo que pedir un objeto en un índice en particular no tiene sentido.

Además de esto, tiene una fuga de memoria - plistDict se asigna pero nunca se libera. ¿Ha ejecutado el analizador estático sobre su código?

Otros consejos

[plistDict objectForKey:@"Animals"];

está devolviendo un diccionario, no una matriz como lo esperas. Debe consultar su archivo PLIST para ver si los datos son correctos.

El error parece que estás llamando objectAtIndex en un objeto NSDictionary en Line Cell.TextLabel.Text = [Animals ObjectatIndex: Row]; Compruebe qué contiene el animal en el momento de ejecución. Para esto, use nslog antes de esta línea. Nslog (@"%@", animales);

Parece animals es algo dictionary Y estas llamando objectAtIndex: método en él. objectAtIndex: es NSArray método.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top