Мой UITableView показывает один и тот же элемент в каждой строке - PullRequest
0 голосов
/ 26 марта 2012

У меня есть UITableView, который я хочу заполнить деталями из массива объектов.В табличном представлении отображается один и тот же элемент в каждой строке (хотя правильное количество строк!). Я знаю, что это должно быть легко, но я не могу понять, в чем я ошибся:

Фрагмент кодакоторый инициализирует данные таблицы:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

{

    if([segue.identifier isEqualToString:@"Show Tank List"])

    {

        NSURL *myUrl = [[NSURL alloc]initWithString:@"http://localhost/~stephen-hill9/index.php"];
        NSData *data = [[NSData alloc] initWithContentsOfURL:myUrl];
        NSError *error;
        NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
        int i;
        NSMutableArray *tanksList;
        tank *thisTank = [[tank alloc] init];
        tanksList = [[NSMutableArray alloc] init];
        for (i=0; i<json.count; i++) {
            NSDictionary *bodyDictionary = [json objectAtIndex:i];
            thisTank.tankNumber = [bodyDictionary objectForKey:@"ID"];
            thisTank.tankProduct = [bodyDictionary objectForKey:@"Product_Desc"];
            thisTank.tankPumpableVolume = [bodyDictionary objectForKey:@"Pumpable"];
            [tanksList addObject:thisTank];
        }
        [segue.destinationViewController setTanks:tanksList];
    }
}

... и код, который загружает таблицу в следующем представлении ...

#pragma mark - Table view data source

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    // Return the number of sections.
    return 1;//keep this section in case we do need to add sections in the future.
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Return the number of rows in the section.
    return [self.tanks count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Tank List Table Cell";
    UITableViewCell *cell = [self.tankTableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!cell)
    {
        cell = [[UITableViewCell alloc] initWithFrame:CGRectZero];
    }
    tank *thisTank = [self.tanks objectAtIndex:indexPath.row];
    cell.textLabel.text = thisTank.tankNumber;
    return cell;
}

Ответы [ 2 ]

3 голосов
/ 26 марта 2012

Переместить это:

tank *thisTank = [[tank alloc] init]; 

Внутри вашего цикла. Вы обновляете один и тот же объект снова и снова.

Кроме того, вы неправильно инициализируете ячейку - используйте назначенный инициализатор и передайте идентификатор повторного использования, в противном случае вы будете все время создавать новые ячейки:

cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];

И вы действительно должны следовать соглашениям о присвоении имен. Классы начинаются с заглавных букв, все остальное начинается со строчных букв. Это делает ваш код намного проще для чтения, в любом случае для других

0 голосов
/ 26 марта 2012

каждый раз перезагружать таблицу !!!

[self.tableView reloadData];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...