UITableViewCell не отображает данные до прокрутки вниз

#ios #objective-c #uitableview #segue

#iOS #objective-c #uitableview #segue

Вопрос:

Мой JSON ответ на UITableView .

Но данные UITableView не отображаются до прокрутки вниз.

Пожалуйста, помогите мне.Как это решить?

Извините за мой плохой английский язык. Потому что я немного говорю по-английски.

 - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    globlOnDisplayEffect = [GlobalVariable sharedInstance];
    globlOnDisplayEffect.arTableDataSelectedWhereHouse = [[NSArray alloc] init];

}

- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [globlOnDisplayEffect.arTableDataSelected count]>0 ?[globlOnDisplayEffect.arTableDataSelected count]:1;

}

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"DisplayEffectQtyViewCell";
    DisplayEffectQtyViewCell *cell = [self.tableViewDetailList dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];
    if(cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DisplayEffectQtyViewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

    } 
    if (globlOnDisplayEffect.arTableDataSelected) {
        NSMutableArray *myMutbleArray = [[NSMutableArray alloc] init];
        [myMutbleArray addObject:globlOnDisplayEffect.arTableDataSelected];
        if (myMutbleArray)
        {
                NSDictionary *myDic = [globlOnDisplayEffect.arTableDataSelected objectAtIndex:indexPath.row];
                NSDictionary *cont = [myDic objectForKey:@"DataList_SPI_DetailF10"];
                NSString *f10_cmpt = [self getString:[cont objectForKey:@"f10_cmpt"]];
                NSString *f10_dt = [self getString:[cont objectForKey:@"f10_dt"]];
                NSString *f10_item = [self getString:[cont objectForKey:@"f10_item"]];
                NSString *f10_lot = [self getString:[cont objectForKey:@"f10_lot"]];
                NSString *f10_model = [self getString:[cont objectForKey:@"f10_model"]];
                NSString *f10_of = [self getString:[cont objectForKey:@"f10_of"]];
                NSString *f10_semi = [self getString:[cont objectForKey:@"f10_semi"]];
                NSString *f10_tm = [self getString:[cont objectForKey:@"f10_tm"]];
                NSString *f10_uncmp = [self getString:[cont objectForKey:@"f10_uncmp"]];
               [cell setf10_cmpt:f10_cmpt setf10_dt:f10_dt setf10_item:f10_item setf10_lot:f10_lot setf10_model:f10_model setf10_of:f10_of setf10_semi:f10_semi setf10_tm:f10_tm setf10_uncmp:f10_uncmp];
         }
    }

    return cell;
}
  

Комментарии:

1. у вас reload есть свой tableview при назначении вашего JSON UITableView ?

2. просто удалите условие else .

3. Данные ячейки не отображаются для else. Удалите else.

4. Я удаляю все остальное, следуя за вами. Но при прокрутке вниз возникает ошибка, такая как показано ниже. *** Завершение работы приложения из-за неперехваченного исключения ‘NSRangeException’, причина: ‘-[__NSCFArray objectAtIndex:]: индекс (10) за пределами границ (10)’

5. Можете ли вы поделиться содержимым globlOnDisplayEffect. arTableDataSelected. Чтобы я мог помочь вам проанализировать данные

Ответ №1:

Замените следующий код на существующий.

 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"DisplayEffectQtyViewCell";
    DisplayEffectQtyViewCell *cell = [self.tableViewDetailList dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];
    if(cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DisplayEffectQtyViewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

    } 
    //check whether the globlOnDisplayEffect.arTableDataSelected is empty
    if(globlOnDisplayEffect.arTableDataSelected  != nil amp;amp; [globlOnDisplayEffect.arTableDataSelected count] > 0){
                NSDictionary *myDic = [globlOnDisplayEffect.arTableDataSelected objectAtIndex:indexPath.row];
                NSDictionary *cont = [myDic objectForKey:@"DataList_SPI_DetailF10"];
                NSString *f10_cmpt = [self getString:[cont objectForKey:@"f10_cmpt"]];
                NSString *f10_dt = [self getString:[cont objectForKey:@"f10_dt"]];
                NSString *f10_item = [self getString:[cont objectForKey:@"f10_item"]];
                NSString *f10_lot = [self getString:[cont objectForKey:@"f10_lot"]];
                NSString *f10_model = [self getString:[cont objectForKey:@"f10_model"]];
                NSString *f10_of = [self getString:[cont objectForKey:@"f10_of"]];
                NSString *f10_semi = [self getString:[cont objectForKey:@"f10_semi"]];
                NSString *f10_tm = [self getString:[cont objectForKey:@"f10_tm"]];
                NSString *f10_uncmp = [self getString:[cont objectForKey:@"f10_uncmp"]];
               [cell setf10_cmpt:f10_cmpt setf10_dt:f10_dt setf10_item:f10_item setf10_lot:f10_lot setf10_model:f10_model setf10_of:f10_of setf10_semi:f10_semi setf10_tm:f10_tm setf10_uncmp:f10_uncmp];
    }
    return cell;
}

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

- (NSInteger) numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}
  

Также вам необходимо перезагрузить tableview со следующей строкой. Всякий раз, когда вы добавляли содержимое внутри globlOnDisplayEffect.arTableDataSelected

 [self.tableViewDetailList reloadData];
  

Ответ №2:

Сделайте это —

 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier = @"DisplayEffectQtyViewCell";
    DisplayEffectQtyViewCell *cell = [self.tableViewDetailList dequeueReusableCellWithIdentifier:simpleTableIdentifier forIndexPath:indexPath];
    if(cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"DisplayEffectQtyViewCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];

    }  if (globlOnDisplayEffect.arTableDataSelected) {
        NSMutableArray *myMutbleArray = [[NSMutableArray alloc] init];
        [myMutbleArray addObject:globlOnDisplayEffect.arTableDataSelected];
         if (myMutbleArray)
        {
            NSDictionary *myDic = [globlOnDisplayEffect.arTableDataSelected objectAtIndex:indexPath.row];
            NSDictionary *cont = [myDic objectForKey:@"DataList_SPI_DetailF10"];
            NSString *f10_cmpt = [self getString:[cont objectForKey:@"f10_cmpt"]];
            NSString *f10_dt = [self getString:[cont objectForKey:@"f10_dt"]];
            NSString *f10_item = [self getString:[cont objectForKey:@"f10_item"]];
            NSString *f10_lot = [self getString:[cont objectForKey:@"f10_lot"]];
            NSString *f10_model = [self getString:[cont objectForKey:@"f10_model"]];
            NSString *f10_of = [self getString:[cont objectForKey:@"f10_of"]];
            NSString *f10_semi = [self getString:[cont objectForKey:@"f10_semi"]];
            NSString *f10_tm = [self getString:[cont objectForKey:@"f10_tm"]];
            NSString *f10_uncmp = [self getString:[cont objectForKey:@"f10_uncmp"]];

            [cell setf10_cmpt:f10_cmpt setf10_dt:f10_dt setf10_item:f10_item setf10_lot:f10_lot setf10_model:f10_model setf10_of:f10_of setf10_semi:f10_semi setf10_tm:f10_tm setf10_uncmp:f10_uncmp];
        }
    }
    return cell;
}
  

Просто удалите скобки else.
То, что вы делали, это то, что если ячейка не найдена после удаления из очереди, вы возвращаете пустую ячейку, а в следующий раз при прокрутке она попадает внутрь блока else и заполняется данными.
Итак, просто удалите скобки else.

Комментарии:

1. *** Завершение работы приложения из-за неперехваченного исключения ‘NSRangeException’, причина: ‘-[__NSCFArray objectAtIndex:]: индекс (10) за пределами границ (10)’

2. При прокрутке вниз.

3. Ваша проблема с не отображением ячейки была связана с частью else. Сбой происходит потому, что массив, из которого вы заполняете, находит неправильный индекс, поскольку индекс не существует в массиве, и вы пытаетесь получить к нему доступ. Эту часть вы должны решить самостоятельно, так как это логическая ошибка, которую вы бы знали, что делать. Приветствия.

4. Я новый разработчик. Я пытаюсь решить эту проблему 4-6 дней. Но я действительно не нашел способа решить эту проблему. Пожалуйста, кто-нибудь, помогите мне.

5. Теперь я могу устранить логическую ошибку и следовать вашему коду. Но это не работает. UITableView не отображает данные.