Табличное представление появляется только после перезапуска приложения - PullRequest
0 голосов
/ 02 марта 2011

Теперь у меня проблема не одна, а две, а именно:

Требование к приложению: введите данные о сотрудниках и нажмите кнопку Сохранить.имя сотрудника должно быть добавлено в табличном представлении.Нажмите на одну строку, детали должны отображаться в подробном представлении.

Проблема 1: после первого нажатия кнопки «Сохранить» она отображается в виде таблицы, но со следующего нажатия она не отображается до тех пор, пока приложение не будет перезапущено.Мой код для этого выглядит следующим образом:

(void)saveDetails{  
  EmployeeDetailsAppDelegate *appDelegate = (EmployeeDetailsAppDelegate *) [[UIApplication sharedApplication] delegate];
  NSManagedObjectContext *context = [appDelegate managedObjectContext]; 
  NSManagedObject *newDetails;
  newDetails = [NSEntityDescription insertNewObjectForEntityForName:@"Details" inManagedObjectContext:context]; 
  [newDetails setValue:empID.text forKey:@"EmployeeID"];
  [newDetails setValue:empName.text forKey:@"EmployeeName"];
  [newDetails setValue:empDepartment.text forKey:@"EmployeeDepartment"];    
  empID.text = @"";
  empName.text = @"";
  empDepartment.text = @""; 
  [[appDelegate rootViewController]addNewObject:empName.text];
  NSError *error;
  [context save:&error];
  [self dismissModalViewControllerAnimated:YES];
}

Проблема 2: Это в основном не проблема, а запрос.При щелчке строки в табличном представлении отдел сотрудников отображается в подробном представлении.Теперь я хочу также отобразить идентификатор сотрудника.Как я могу это сделать?Мой код для отображения сотрудника отдела:

(void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
  if([self.array count]){
    dictionary = [self.array objectAtIndex:indexPath.row] ;
    if([dictionary objectForKey:@"EmployeeDepartment"]){            
      [dictionary objectForKey:@"EmployeeDepartment"];
      NSString *empDep = [dictionary objectForKey:@"EmployeeDepartment"];
      NSLog(@"Dep is %@",empDep);
     }
   }
   detailViewController.detailItem = [NSString stringWithFormat:@"Employee Department: %@",[dictionary objectForKey:@"EmployeeDepartment"]];
   self.navigationItem.leftBarButtonItem.enabled = YES;
}

PS: это для iPad с Core данные, используемые в качестве хранилища.

1 Ответ

1 голос
/ 02 марта 2011

когда вы используете базовые данные с UITableView, вам обязательно следует использовать NSFetchedResultsController и его делегат методы.

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

Короче говоря, NSFetchedResultsController «отслеживает» объекты базовых данных, которые вы хотите отобразить в табличном представлении, и, если объект изменяется, он сообщит вашему делегату, что предпримет соответствующее действие (например, вставка или удаление).строка).Документация содержит полный пример кода для методов делегата, которые вы должны реализовать.

По второму вопросу: измените свой DetailViewController, чтобы он мог обрабатывать NSManagedObject.DetailView, где вы не можете редактировать объект, обычно бесполезен, поэтому вам все равно придется делать это рано или поздно.

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