使用NSMutableArray对象的Xcode表视图

时间:2012-10-17 17:36:19

标签: objective-c

我有一个带有视图控制器的Table视图,我试图用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行且具有相同餐厅信息的表。 / p>

我试图修复它,我花了很多时间没有结果。 我会感谢任何帮助。 提前致谢 路易斯

PD:阵列的信息是西班牙语,对不起

1 个答案:

答案 0 :(得分:1)

您将同一个对象插入datosTabla数组5次。即使您在for循环的每次迭代中更改lugar对象的属性,指向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];
    }
}

每次调用该方法时,您都需要填充单元格的文本字段,而不仅仅是在单元格== 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;
}