Почему моя таблица не загружается? - PullRequest
0 голосов
/ 30 ноября 2011

У меня есть следующий код, где я считаю, что NSFetchRequest на самом деле работает, но в моем tableView (peopleList) ничего не отображается после запуска viewWillAppear.

-(void)viewWillAppear:(BOOL)animated{

  AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
  NSManagedObjectContext *moc = [appDelegate managedObjectContext]; 

  NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Person" 
                                                     inManagedObjectContext:moc];

  NSFetchRequest *request = [[NSFetchRequest alloc] init];
  [request setEntity:entityDescription];


  NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES];
  [request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];


  NSError *error = nil;

  NSLog(@"Count for request is %a", [moc countForFetchRequest:request error:&error]);

  personArray = [moc executeFetchRequest:request error:&error];

  [peopleList reloadData];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

  static NSString *cellIdentifier = @"Cell";

  UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
  if (cell == nil) {
    cell = [[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:cellIdentifier];
  }

  NSString *cellValue = [personArray objectAtIndex:indexPath.row];
  cell.textLabel.text = cellValue;

  return cell;

}

На всякий случай моя раскадровка подключена, как показано.

enter image description here

Моя консоль говорит: «Количество запросов равно 23», что заставляет меня думать, что разбивка заключается в том, чтобы сам массив отображался в интерфейсе. Что должно произойти, чтобы мой personArray появился в peopleList?

Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 30 ноября 2011

Вам необходимо объявить UITableViewDataSource, который является объектом, который реализует этот протокол и предоставляет данные для вашей таблицы.Это часть, которая вызывает cellForRowAtIndexPath.Он часто самозапускается в классе tableViewController, потому что он обычно имеет массив в качестве локальной переменной.

myTableView.dataSource = self;

И в вашем заголовочном файле сделайте что-то вроде этого:

0 голосов
/ 30 ноября 2011

Если вы извлекаете работу, я думаю, вы не установили источник данных и / или делегата для просмотра таблицы.

...