2014-02-06 3 views
0

Я делаю это все время, но по какой-то причине он не работает для меня сегодня.Загрузить массив в таблицуView?

Клетки пусты, вот мой код:

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

    return [self.messageArray count]; 
} 

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

    // Configure the cell.. 
    NSString *messageAtIndexPath = [messageArray objectAtIndex :[indexPath row]]; 
    [[cell textLabel] setText:messageAtIndexPath]; 

    return cell; 
} 

Я сделал, что все (Делегирование и Source) подключен правильно.

Если я жёстко материал, например:

return 5; 

и

[[cell textLabel] setText:@"this is a cell"]; 

Тогда его работу, поэтому я не уверен, Что вверх. Также мой массив заполнен, я вижу его в консоли журнала.

EDIT:

dispatch_async(queue, ^{ 
    NSString *postString = @"controller=Push&action=GetPushAlerts&accountId=123"; 
    NSData *JsonData = [ApiCaller post :postString]; 
    NSDictionary *result = [NSJSONSerialization JSONObjectWithData:JsonData options:NSJSONReadingMutableContainers error:nil]; 
    //parsing JSON 

    dispatch_async(dispatch_get_main_queue(), ^{ 

     BOOL success = [result[@"success"] boolValue]; 
     if(success){ 
      // Account exists, parse the data 
      NSDictionary *data = [result objectForKey:@"data"]; 
      messageArray = [data objectForKey:@"message"]; 

      // NSLog(@"count %@", message); 

     } 

    }); 
}); 
+0

Попробуйте отладить или ваш массив пуст или его содержимое –

+0

Почему вы делаете deque: forIndexPath? Я всегда просто дека с идентификатором. Кроме того, содержимое messageArray? –

+0

Делегат и источник данных для набора таблиц? Столовая розетка соединена? –

ответ

1

Таким образом, чтобы обернуть вещи: если вы загружаете данные асинхронно, вы ДОЛЖНЫ перезагрузить таблицу View (или что-нибудь, что отображает данные и нарисовано до поступления данных), поскольку при загрузке представления оно отображается в соответствии с данные, которые он имеет в THAT мгновенно.

Чтобы сделать это, добавьте следующую команду, где данные поступают (как правило, в блок успеха, если вы не хотите отображать некоторые данные на блок отказа, а):

[self.tableView reloadData]; 

Если на другой (редко используется), он зависает приложение, в котором выполняется вызов (обычно в viewDidLoad), поэтому отображение выводится только после того, как данные были получены, и, таким образом, данные должны отображаться.

+0

Большое спасибо, это был мой первый раз, чтобы загрузить его асинхронно, я не понял, что мне пришлось перезагрузить данные. Урок выучен! –

+0

Быстрый вопрос: знаете ли вы, как вернуть NSData из 'dispatch_async (queue,^{}', если нет, я опубликую новый вопрос –

+0

Рад, что я мог бы помочь :) Взял меня как два дня, чтобы написать мой первый асинхронный запрос, re doing good :) –

0

Это может быть, что клетки определяются как статические в IB, а не динамический? Сначала вы должны это проверить.

+1

Вы должны поместить эти суждения в комментарий, а не ответ. Если это правильно, вы ответите после того, как получите его. –

+0

нет его не статической ячейки точно –

+0

Является ли набор делегата/источника данных? –

Смежные вопросы