2012-01-10 4 views
0

Я работаю над приложением IOS и был в тупике этой проблемой в течение недели и не могу найти решение. Любая помощь, которую вы можете предложить, будет очень признательна. Вот моя настройка:IOS Modal View Controller Presents Black Screen

  1. У меня есть контроллер панели вкладок.
  2. У меня есть TableViewController, в котором есть панель навигации с элементом навигации «Добавить».
  3. После того, как вы нажмете селектор «Добавить», я модно представляю другой viewController, на котором есть сборщик.
  4. Я использую основные данные.

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

Не регистрируется сообщение об ошибке, даже если объект не был сохранен, когда вы нажимаете «сохранить» на панели навигации. Однако нажатие «save» вернет вас обратно в TableViewController, и похоже, что объект был добавлен.

Вот код в моем TableViewController:

- (void)add:(id)sender { 
    SecondViewController *addController = [[SecondViewController alloc] init]; 
    addController.delegate = self; 

    Entity *newEntity = [NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:self.managedObjectContext]; 
    addController.entity = newEntity; 

    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:addController]; 
    [self.navigationController presentModalViewController:navController animated:YES]; 
} 

- (void)secondViewController:(SecondViewController *)secondViewController didAddEntity:(Entity *)entity { 

    if (entity) {   

    [self showEntity:entity animated:NO]; 
} 

[self dismissModalViewControllerAnimated:YES]; 
} 


- (void)showEntity:(Entity *)entity animated:(BOOL)animated { 
    EntityDetailTableViewController *detailViewController = [[EntityDetailTableViewController alloc] initWithStyle:UITableViewStyleGrouped]; 
    detailViewController.entity = entity; 

    [self.navigationController pushViewController:detailViewController animated:animated]; 
} 

Вот код на втором View Controller:

- (void) save { 

    entity.attribute = attributeTextField.text; 

    NSError *error = nil; 

    if (![entity.managedObjectContext save:&error]) 
     { 
     NSLog(@"Problem saving attribute: %@", [error localizedDescription]); 
     } 
     NSLog(@"saveAttribute"); 

    [self.delegate secondViewController:self didAddEntity:entity]; 

} 

Любые предложения о том, куда идти отсюда было бы очень полезно.

ответ

2

После долгих разочарований я нашел ответ. Если вы используете раскадровку, вы не можете перейти к следующему контроллеру представления стандартным кодом. Я положил инструкцию prepareForSegue в файл TableViewController.m, а затем подключил соединение в раскадровке и идентифицировал segue.

Теперь, когда вы нажимаете кнопку «Добавить», она переходит на новый экран контроллера просмотра, и она не черная.

Here's a link to a useful tutorial

0

Моя догадка пути вы инициализация не права:

SecondViewController *addController = [[SecondViewController alloc] init]; 

должен быть initWithNIB:

+0

Когда я пытаюсь initWithNib: Я получаю сообщение об ошибке «завершающее приложение из-за неперехваченного исключением„NSInternalInconsistencyException“, причина:„ Не удалось загрузить СИБ в связке“Я думаю, это потому, что я использую раскадровку . – PopUp

+0

Обновление: я попробовал добавить еще один контроллер вида, на котором был только textField, и заменил его на контроллер вида, на котором был сборщик, и я все еще испытываю тот же черный экран. Кто-нибудь знает о другом способе инициализации второй вид контроллера, представленного с использованием раскадровки? Это, похоже, проблема. – PopUp

+0

Просто используйте Segue в своем раскадровке, перетащите ctrl из любого действия, которое запускает модальный вид, например, от кнопки или ячейки таблицы до точки dal. – agilityvision

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