Отсутствует прокси для идентификатора UIStoryboardPlaceholder

Привет, я, кажется, наткнулся на странную вещь при разработке приложения для раскадровки.

Мое приложение остановлено сразу после заставки и в консоли появляется сообщение об ошибке:

Missing proxy for identifier UIStoryboardPlaceholder

Теперь, если я попытаюсь запустить приложение, я получаю новые сообщения в консоль, которые, я считаю, связаны с тем фактом, что с первым сообщением об ошибке

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason:
 '[<IntroViewController 0x6e35f40> setValue:forUndefinedKey:]: 
this class is not key value coding-compliant for the key sceneViewController.

Странно, что я получаю эту ошибку только при работе с iOS 5.1 Simulator. Он отлично работает на симуляторе iOs 6, а также на устройствах с iOs 6 и iOs 5.1

Я попытался найти ответ, но google говорит, что он не смог найти никаких результатов для слова UIStoryboardPlaceholder, не говоря уже о полном сообщении об ошибке. Я убедился, что у меня нет слова "UIStoryboardPlaceholder" в любом месте моего проекта xcode (даже внутри файлов nib), и там нигде не упоминается "sceneViewController". Любая идея, что может быть неправильным?

EDIT: Я попытался выполнить проект reset для симулятора и очистки, но безрезультатно

Ответ 1

У нас была та же проблема: контроллер представления в файле раскадровки с его интерфейсом, определенным в отдельном файле XIB. (Использование Xcode 6.3.1, iOS 8.3 и Swift 1.2.)

Мы используем Swift, поэтому мы добавили объявление @objc() в объявление класса:

@objc(TestViewController) class TestViewController: UIViewController

Мы могли бы инстанцировать контроллер вида просто отлично с другого контроллера представления с помощью self.storyboard?.instantiateViewControllerWithIdentifier( "TestViewController" ), но при представлении контроллера вида (с помощью self.presentViewController( viewController, animated: true, completion: nil )) приложение разбилось с тем же "отсутствующим прокси" и "не кодированием ключевых значений" для ошибка ключевого сценария ".

Наше решение, которое мы обнаружили после очень расстроенной пробной и ошибочной отладки, просто удостоверилось, что идентификатор раскадровки диспетчера представлений в файле раскадровки не тот же как имя класса.

Когда мы переименовали идентификатор раскадровки из "TestViewController" в "testViewController" (только разница была первой буквой в нижнем регистре), все сработало...

Странно? Вы боитесь, но теперь все работает.

Ответ 2

У меня была та же проблема. Попробуйте очистить проект и восстановить симулятор.

Ответ 3

Я получал ту же ошибку с приложением, которое я конвертировал из .xib файлов в раскадровки. Мое приложение содержало UITabBarController, и нажатие на определенные вкладки вызовет ошибку.

В моем случае проблема заключалась в том, что я скопировал контроллеры представлений в раскадровку, которая использовала свойство "NIB name" для загрузки представления контроллера представления из внешнего .xib файла. Контроллеры просмотра раскадровки не поддерживают загрузку представлений из .xib файлов, поэтому в моей раскадровке был контроллер вида, который не имел представления.

Я открыл внешний файл .xib, скопировал представление, вставил его в соответствующий контроллер представления в своем раскадровке и убедился, что вставное представление подчинено (с отступом) регулятором представления в сцене раскадровки. Затем я снова подключил представление к выходам в контроллере представления.

Когда я перезапустил приложение, ошибка исчезла.

Ответ 4

Добавьте меня в список. Я получаю эту ошибку после "рефакторинга - переименования" в классе. Класс, который я переименовываю, является обычным ViewController со своим собственным .xib. Я использую Storyboard, который запускает viewController, содержащий "Container View", который имеет встроенный в него пользовательский ViewController при запуске.

Единственный выход из этого до сих пор - НЕ использовать мой refactored.xib(отключить его от представления контейнера).

Мой полу-решение:
Я восстановил свое приложение из предыдущего рабочего момента и создал новый пользовательский ViewController и .xib с нуля вместо рефакторинга. Подключил его к Storyboard, и я снова получил сообщение об ошибке. Очистил сборку и удалил приложение с симулятора и снова запустил, а затем он волшебным образом бежал без ошибок. По этой причине я считаю, что есть ошибка в Xcode с Refactor-Rename, которая развращает какой-то файл раскадровки за кадром. Как только я подтвердил, что новый .xib был прикреплен к раскадровке без ошибок, я скопировал/вставил код класса в новый пользовательский класс viewController и прошел процесс повторного подключения объектов класса к .xib, как и следовало ожидать. Разбили его и все еще работало.

FYI - вот некоторые из FAILED шагов, которые я предпринял в попытке восстановить от ошибки (до отказа и восстановления моментального снимка).
1. Очистка сборки.
2. Удаление приложения в iOS-симуляторе.
3. Удаление всех видов в пользовательском ViewController.xib.
4. Назовите пользовательский ViewController что-то еще.
5. В Storyboard добавьте пустой вид в ViewController, представляющий мой пользовательский класс Viewcontroller. Это работало и позволяло моему приложению запускать, однако мой пользовательский класс не смог загрузить свои собственные представления вместо этого пустого представления по умолчанию, а также не отображал его собственные виды, делая прозрачный прозрачный вид по умолчанию. Отладка показала, что мои пользовательские классы .xib-представления равны нулю при назначении self.view.

В настоящее время я избегаю Xcode Refactor-Rename для файлов с .xib.

Ответ 5

У меня были одни и те же ошибки, наконец, решил. Моя проблема заключалась в том, что у меня было:

[[storyboard instantiateViewControllerWithIdentifier:@"TripDetail"] methodThatDoesNotExist:@"param"]