2011-02-08 18 views
5

Tengo un NSMutableArray con datos (codificados).¿Cómo uso un NSMutableArray como un DataSource para mi UITableView

que implementan estos dos métodos TableView y en IB, He configurado el delegado y la fuente de datos

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [myArray count]; 
} 

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"]; 

    if (!cell) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"UITableViewCell"] autorelease]; 
    } 

    cell.textLabel.text = [myArray objectAtIndex:[indexPath row]]; 
    NSLog(@"Cell is %@", [myArray objectAtIndex:indexPath.row]); 
    return cell; 
} 

Los datos no aparecerán en la TableView. He ejecutado NSLog y puedo ver que los datos están en myArray.

Agregué el NSLog al código y parece que el código nunca se ejecuta. La pregunta es ¿cómo se está creando mi matriz?

Aquí está el código

- (id)init:(NSMutableArray *)theArray 
{ 
    [super init]; 
    countryTable.delegate = self; 
    countryTable.dataSource = self; 

    UITapGestureRecognizer * tapRecognizer = [[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTapped:)] autorelease]; 
    [window addGestureRecognizer:tapRecognizer]; 

    myArray = [[NSMutableArray alloc] init]; 
    myArray = theArray; 
    return self; 
} 
+0

¿cómo se está creando el 'NSMutableArray'? – WrightsCS

Respuesta

5

Su código básica es correcta, sólo tiene que tener una serie (que no se ha proporcionado aquí), por lo que este sería un ejemplo:

NSMutableArray *myArray = [NSMutableArray arrayWithObjects:@"One",@"Two",@"Three",nil]; 

Y puede NSLog esto: NSLog(@"Count: %i, Array: %@",[myArray count], myArray);

salida: ¿Qué debe devolver como el cell.textLabel.textpor tu ejemplo

Incluido: 3, Matriz: ( "Uno", "Dos", "Tres" )

También debe asegúrese de configurar los protocolos UITableViewDelegate y UITableViewDataSource en su encabezado.

0

Prueba esto -

cell.textLabel.text = [[myArray objectAtIndex:indexPath.row] retain]; 
+1

UILabel.text es una propiedad de copia, el retener extra solo filtrará ese NSString. –

+0

Intenté retener y el mismo problema. Voy a publicar mi código actualizado arriba –

1

No sé si la pregunta sigue abierta pero darle una oportunidad.

Cuando leo su código, no veo dónde se crea una instancia de countryTable, entonces supongo que está conectado en InterfaceBuilder? Y si este es el caso, countryTable solo es válido después de viewDidLoad. Pero también podría establecer delegate y dataSource en InterfaceBuilder.

Por cierto, cada vez que cambie el origen de datos (myArray), llame a countryTable.reloadData.

Cuestiones relacionadas