Загрузка UITableViewController внутри UIViewController внутри проблемы UIViewController - PullRequest
0 голосов
/ 28 марта 2011

Я действительно не знаю, является ли то, что я делаю, правильным способом сделать это.Сейчас, кажется, он работает до тех пор, пока не достигнет определенной точки с сообщением EXC_BAD_ACCESS.

Я опишу, что я делаю, как лучше и с наиболее важными деталями, которые я могу сказать: у меня есть CalendarViewController, которыйнаследует UIViewController, который загружается из файла .xib (CalendarViewController.xib).Класс содержит UIView с именем contentView, который я создал и который инициализирую с помощью другого файла пера, основанного на классе, который также унаследован от UIViewController:

- (void)viewDidLoad {

      [super viewDidLoad];

      calendarView = [[CalendarView alloc] initWithNibName:@"CalendarView" bundle:nil];

      [contentView addSubview:calendarView.view]; 

   }

(calendarView - это класс, наследующий UIViewController, а viewDidLoad от CalendarViewController..

CalendarView.xib имеет UITableViewController с соответствующим ему UITableView. Этот контроллер табличного представления связан с CalendarTableController, для которого я также сгенерировал для него файл .xib.

Все создается простоверно (очевидно), но происходит сбой где-то очень неожиданно. CalendarTableController также реализует DateLoaderDelegate, который загружает информацию из xml по внешнему URL.

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {

   // When the data has all finished loading, we set a copy of the  
  // loaded data for us to access. This will allow us to not worry about
 //  whether a load is already in progress when accessing the data. 

    self.lastLoadedMatchXMLData = [self.matchXMLData copy]; 

 // Make sure the _delegate object actually has the xmlDidFinishLoading     
 // method, and if it does, call it to notify the delegate that the     
 // data has finished loading.  

 if ([_delegate respondsToSelector:@selector(xmlDidFinishLoading)])
 {      
     [_delegate xmlDidFinishLoading];
 } 

}

Приложение получает к этомуточка без проблем. _delegate содержит правильный объект (CalendarTableController, который реализует DateLoaderDelegate). Но когда он прибывает в строку:

  if ([_delegate respondsToSelector:@selector(xmlDidFinishLoading)])

, он падает с tEXC_BAD_ACCESS, я действительно не знаю причину, если я смотрю на отладчик, сбой не происходит ни в одном из моих классов, так как любой из них появляется в стеке выполнения.URLConnectionClient, кажется, генерирует его, но я не знаю, почему.Загрузка xml работала раньше, прежде чем я переставил ViewControllers для работы, как я описал сейчас.

Есть идеи?

Ответы [ 3 ]

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

Это странно.Я исправил проблему, но мне пришлось посвятить весь UIViewController для содержания UITableView.Я сделал следующее:

  1. Создание IBOutlet с пользовательским UITableViewController (CalendarTableViewController) в пользовательском UIViewController.
  2. В загруженном .xib-файле я связал IBOutlet с созданным UITableViewControllerобъявлен как CalendarTableViewController.

Таким образом, я решил проблему освобождения UITableViewController без причины.Но теперь представления изображений, которые я поместил в промежуточный UIViewController, не будут отображаться.Я должен был установить этот UIViewController, чтобы он содержал только CalendarTableView и поместил представления изображений в начальный UIViewController.Странно, не правда ли?Мне не очень нравится иерархия, которую я создал ... но сейчас это сработает = S

0 голосов
/ 26 июня 2011

Вы пытались вызвать loadView перед добавлением представления вложенного контроллера в представление родителя?

Возможно viewDidLoad не выполняется до добавления представления и некоторых переменныхникогда не были инициализированы.

0 голосов
/ 28 марта 2011

Убедитесь, что вы определили свойства для всех ваших подпредставлений и что вы сохраняете все, что вам нужно. Плохой доступ Может означать, что вы пытаетесь вызвать respondsToSelector для освобожденного объекта.

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