1

我有一个带有视图控制器的表视图,我试图用 NSMutableArray 中的一些数据填充这个表。

我有一个名为 Lugar.m 和 Lugar.h 的类,具有一些属性(在 .m 文件中带有 @synthesize),如下所示:

@property (nonatomic, strong) NSString *nombre;
@property (nonatomic, strong) NSString *direccion;
@property (nonatomic, strong) NSString *descripcion;
@property (nonatomic, strong) NSString *precio;

然后我有带有以下 viewDidLoad 方法的表视图的控制器

- (void)viewDidLoad
{
[super viewDidLoad];
self.title =@"Comer";
Lugar *lugar = [[Lugar alloc] init];
self.datosTabla = [[NSMutableArray alloc] initWithCapacity:6];
NSArray *nombres = [[NSArray alloc] initWithObjects:@"Masala",@"Italiano",@"Gaia",@"Pekaditos",@"Ojeda",@"Plan B", nil];
NSArray *direcciones = [[NSArray alloc] initWithObjects:@"C/San Roque, 5", @"C/ Moneda, 7 ",@"C/Nueva, 6", @"C/San Roque, 5", @"C/ Moneda, 7 ",@"C/Nueva, 6", nil];
NSArray *descripciones = [[NSArray alloc] initWithObjects:@"Bonito restaurante ecologico",@"Restaurante fino y caro", @"El mejor marisco de burgos",@"Calida recio mud", @"Calidad insuperable" , @"Calidad insuperable",nil];
NSArray *precios = [[NSArray alloc] initWithObjects:@"25€", @"15€", @"12€", @"6€", @"34€", @"34€",nil];
for (NSUInteger i = 0; i < 6; i++) {
lugar.nombre = [nombres objectAtIndex:i];
lugar.direccion = [direcciones objectAtIndex:i];
lugar.descripcion = [descripciones objectAtIndex:i];
lugar.precio = [precios objectAtIndex:i];
[self.datosTabla insertObject:lugar atIndex:i];
}

在这个文件中,我还有 cellForRowAtIndex

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    Lugar *tempName =[self.datosTabla objectAtIndex:indexPath.row];
    cell.textLabel.text = tempName.nombre;
    }
    return cell;
    }

我也有返回行和部分的方法

该应用程序运行正常,但它只向我显示添加到 mutableArray 的最后一个对象的名称,在这种情况下,餐厅称为:Plan B。所以我刚刚得到一张包含相同餐厅信息的 6 行表。

我试图修复它,但我花了很多时间都没有结果。我会感谢任何帮助。在此先感谢路易斯

PD:数组的信息是西班牙语的,很抱歉

4

1 回答 1

1

您将同一对象插入datosTabla数组 5 次。即使您lugar在 for 循环的每次迭代中更改对象的属性,指向lugar对象的指针也不会更改。

确保在 for 循环内分配lugar对象,以便有 5 个不同的对象。

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title =@"Comer";
    self.datosTabla = [[NSMutableArray alloc] initWithCapacity:6];
    NSArray *nombres = [[NSArray alloc] initWithObjects:@"Masala",@"Italiano",@"Gaia",@"Pekaditos",@"Ojeda",@"Plan B", nil];
    NSArray *direcciones = [[NSArray alloc] initWithObjects:@"C/San Roque, 5", @"C/ Moneda, 7 ",@"C/Nueva, 6", @"C/San Roque, 5", @"C/ Moneda, 7 ",@"C/Nueva, 6", nil];
    NSArray *descripciones = [[NSArray alloc] initWithObjects:@"Bonito restaurante ecologico",@"Restaurante fino y caro", @"El mejor marisco de burgos",@"Calida recio mud", @"Calidad insuperable" , @"Calidad insuperable",nil];
    NSArray *precios = [[NSArray alloc] initWithObjects:@"25€", @"15€", @"12€", @"6€", @"34€", @"34€",nil];
    for (NSUInteger i = 0; i < 6; i++) {
        Lugar *lugar = [[Lugar alloc] init];
        lugar.nombre = [nombres objectAtIndex:i];
        lugar.direccion = [direcciones objectAtIndex:i];
        lugar.descripcion = [descripciones objectAtIndex:i];
        lugar.precio = [precios objectAtIndex:i];
        [self.datosTabla insertObject:lugar atIndex:i];
    }
}

每次调用该方法时,您都需要填充单元格的文本字段,而不仅仅是在 cell == nil 时。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) 
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }

    Lugar *tempName =[self.datosTabla objectAtIndex:indexPath.row];
    cell.textLabel.text = tempName.nombre;
}
于 2012-10-17T17:42:02.617 回答