не удалось загрузить перо с именем «TwitterDrilldownView» - PullRequest
2 голосов
/ 04 мая 2010
-[UIViewController _loadViewFromNibNamed:bundle:] was unable to load a nib named "TwitterDrilldownView"

Я получаю вышеуказанную ошибку, когда помещаю новый ViewController в стек навигации. Это push-код,

[self.navigationController pushViewController:[[[TwitterDrilldownViewController alloc] initWithTwitterAnnotation:temp] autorelease] animated:YES];

По сути, я просто помещаю вновь выделенное и инициализированное представление в стек. Метод инициализации ViewController:

- (id)initWithTwitterAnnotation:(TwitterInfo *)aPOI {  
  if(self = [super init]) {
    poi = aPOI;
  }

  return self;
}

Как видите, я не использую инициализацию с помощью метода nib, и в моем проекте нет файла nib с именем TwitterDrilldownView.

У меня был файл пера до того, как я создал TwitterDrilldownViewController с именем TwitterDrillDownView, но я использовал его для тестирования макета и, опять же, никогда не использовал его. Когда я создал TwitterDrilldownViewController, в проекте присутствовал TwitterDrillDownView.nib, и именно после этого этапа я удалил перо.

Единственная причина этой проблемы, о которой я могу подумать, заключается в том, что XCode каким-то образом создал зависимость от файла пера, поскольку файл пера и контроллер представления называются одинаково (TwitterDrilldownView.nib, TwitterDrilldownViewController.m), как если бы стараюсь быть полезным, но в конечном итоге портит мой проект.

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

Кто-нибудь, пожалуйста, имеет какой-либо опыт с этой проблемой или знаете возможное решение?

Ответы [ 2 ]

2 голосов
/ 17 августа 2012

Это также случилось со мной после удаления файла XIB из моего проекта. Тем не менее, я немного повозился и смог решить проблему.

Ключевым моментом является то, что Xcode, кажется, где-то хранит какую-то ссылку , когда вы создаете XIB и выходы / действия внутри них, и удаляя файл XIB вручную, просто теряете эти ссылки, Удаление этих соединений одно за другим с использованием построителя интерфейса (UB) и XIB, по-видимому, корректно отменяет ссылки на них.

Решение тогда довольно ясно:

  1. Пересоздайте XIB-файл с тем же именем и схожей конструкцией (включая выходы и действия, которые вы выполняли ранее). (Примечание: Если вы не можете вспомнить, как воссоздать выходы и действия XIB, просто заново создайте файл XIB с тем же именем и перейдите к моей заметке «если она все еще не работает» ниже. )
  2. Вручную, по одному, удалите все выходы и действия в вашей XIB с помощью построителя интерфейса (IB).
  3. Пересоберите приложение; если он работает сейчас, вы можете удалить XIB.

( Примечание. Если по-прежнему происходит сбой , возможно, у вас будет другая ошибка. Если ошибка относится к соответствию ключу-значению , то в списке будет указан метод ошибки - и этот метод - ваша проблема. Убедитесь, что вы воссоздаете именованный выход / действие в IB и удаляете его вручную с помощью IB. Это, кажется, отменяет ссылку на вызов в Xcode / вашей среде сборки.)

Удачной охоты!

1 голос
/ 04 мая 2010

UIViewController должен быть инициализирован с использованием метода initWithNibName:bundle:. В его описании указано:

Это назначенный инициализатор для этот класс.

Если вы укажете nil для nibName параметр и не отменять метод loadView в вашем обычае подкласс, контроллер представления по умолчанию поведение искать файл пера чье имя (без .nib расширение) соответствует имени вашего просмотр класса контроллера. Если найдет один, имя класса становится значением свойства nibName, что приводит к в соответствующем файле пера связанный с этим контроллером представления.

Так что, если вы не загружаете ваш контроллер просмотра из nib-файла, убедитесь, что вы переопределили метод loadView и установите в нем свойство view контроллера.
Надеюсь, что это поможет.

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