2015-05-08 4 views
0

Я пытаюсь заполнить UITableView объектами NSMutableArray, который заполняется из таблицы в Parse. Массив определенно заполнен (я проверил его содержимое с помощью NSLog), но таблица остается пустой. Я пробовал много разных способов, включая следующие:UITableViewCell остается пустым

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

    PFObject *postsObject = [postsArray objectAtIndex:indexPath.row]; 
    cell.textLabel.text = [postsObject objectForKey:@"message"]; 
    cell.textLabel.textAlignment = NSTextAlignmentCenter; 

    if (!cell) { 
     cell = [[TableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; 
     cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

    } 

    if (tableView == table) { 
     cell.textLabel.text = [postsArray objectAtIndex:indexPath.row]; 
    } 

    return cell; 
} 

и гораздо проще

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

    cell.messageLabel.text = [NSString stringWithFormat:[postsArray objectAtIndex:[indexPath row]]]; 

    return cell; 
} 

Кто-нибудь есть какие-нибудь идеи?

Заранее спасибо :)

EDIT:

Мои методы DATASOURCE являются:

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

- (NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 
    return postsArray.count; 
} 

EDIT # 2:

Мой код, я использую, чтобы заполнить мой массив и reload my tableView

PFQuery *findData = [PFQuery queryWithClassName:@"AllPosts"]; 
    [findData setLimit:1000]; 
    [findData findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
     if (error == nil) { 
      for (PFObject *object in objects) { 
       PFObject *post = object[@"content"]; 
       NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:post, nil]; 
       postsArray = array; 
       [table reloadData]; 
      } 
     } else { 
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Unable To Load" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
      [alert show]; 
     } 
    }]; 

ответ

0

Вы делаете это неправильно, вы заменяете массив новых данных каждый раз, когда вы найти PFObject в объектах, ваш код должен быть таким: -

//first alloc your array 
postsArray=[[NSMutableArray alloc] init]; 
//Logic goes here 
    PFQuery *findData = [PFQuery queryWithClassName:@"AllPosts"]; 
     [findData setLimit:1000]; 
     [findData findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) { 
      if (error == nil) { 
       for (PFObject *object in objects) { 
        PFObject *post = object[@"content"]; 
        NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:post, nil]; 
        [postsArray addObject:array]; 
        [table reloadData]; 
       } 
      } else { 
       UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"Unable To Load" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
       [alert show]; 
      } 
     }]; 
+1

Большое вам спасибо за ваш ответ! Он показывает больше, чем 1 ячейку, но все ячейки показывают «(« не фактическое сообщение ». Я сейчас подкорректирую его и дам вам знать, как я пойду, спасибо снова :) – Dyllan

+0

Извините, что беспокою вас снова, но я не могу получить textLabel, чтобы показывать только контент, который я хочу. Поскольку он поступает из NSMutableArray, он показывает его между скобками и речевыми метками, например («первый пост»), за исключением того, что он находится на нескольких строках. Вы знаете, как оставить это как текст, который мне нужен? – Dyllan

+0

Это потому, что вы печатаете весь массив. Вы должны напечатать первый и единственный член массива в вашем случае, например: 'if (tableView == table) { cell.textLabel.text = [[postsArray objectAtIndex: indexPath.row] firstObject]; } 'Также я думаю, что вы должны вызывать' [table reloadData] 'после окончания цикла' for', а не на каждой итерации. –

0

Вам также необходимо проверить, действительно ли объект ячейки был возвращен. Также поместите следующий код после вызова dequeueReusableCellWithIdentifier:

if(!cell) 
{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"]; 
} 

Это позволит решить вашу проблему

+0

Спасибо за ваш ответ, однако это не решило мою проблему. Похоже, что ни один из моих методов UITableView не выполняется. Вы знаете, почему это может быть? – Dyllan

+0

@ Dyllan вы говорите, что методы UITableView не выполняются, вам нужно проверить несколько вещей, 1. заданы таблицы делегатов и 'datasource', если их нет, см. Ответ ZeMoon. 2. посмотрите, больше ли ваш 'postsArray.count' больше' 0' –

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