Внедрить UITableView из другого класса ControllerClass в качестве подпредставления

Я пытаюсь реализовать TableView из другого (Table)ViewController в Scrollview. Я буквально часами пытаюсь и не могу понять проблему. Ошибка, которую я получаю:

-[UISectionRowData numberOfSectionsInTableView:]: нераспознанный селектор отправлен экземпляру 0x687fdb0 07.05.2012 16:47:18.966 Test2[12212:f803] * Завершение работы приложения из-за необработанного исключения 'NSInvalidArgumentException', причина: ' -[UISectionRowData numberOfSectionsInTableView:]: нераспознанный селектор отправлен экземпляру 0x687fdb0'

Это сегмент кода, с которым я работаю (реализован в методе viewDidLoad()):

DateSubviewController *dateSubviewController = [[DateSubviewController alloc] init];
//This is the tableViewController which handles the code from the tableView I want to implement. 

NSArray *views = [NSArray arrayWithObjects: [dateSubviewController view], nil];

self.scrollView.delegate = self;
self.pageControlBeingUsed = YES;

for (int i = 0; i < views.count; i++) {
    CGRect frame;
    frame.origin.x = self.scrollView.frame.size.width * i;
    frame.origin.y = 0;
    frame.size = self.scrollView.frame.size;

    UITableView *subview = [views objectAtIndex:i];
    [self.scrollView addSubview:subview];

    subview = nil;
}

self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * views.count, self.scrollView.frame.size.height);

Прокрутка работает сама по себе (протестировано с разными цветными рамками).

Похоже, проблема в том, что [представление dateSubviewController] не вызывает методы, необходимые для работы tableView. Выход view подключен к tableView, но "неактивен" в раскадровках. Я подумал, что это может указывать на неправильное представление, поэтому я уже пытался удалить tableView и снова подключить его. Это не имело никакого эффекта. Сбой появляется сразу после выполнения всего метода viewDidLoad().

Когда я пытаюсь использовать

NSArray *views = [NSArray arrayWithObjects: [dateSubviewController dateTable], nil];

(dateTable - это tableView, который я пытаюсь реализовать) для прямого доступа к tableView массив views содержит 0 элементов в отладке. Методы делегата TableView также не вызываются. Но это не крах.

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


person Git.Coach    schedule 07.05.2012    source источник


Ответы (2)


После нескольких часов работы я понял, что это проблема с autoreleasepool. Когда я инициализировал viewController...

DateSubviewController *dateSubviewController = [[DateSubviewController alloc] init];

... это была локальная переменная, и она освобождалась, как только завершался метод viewDidLoad(). Я должен был использовать его как instancevariable! Я надеюсь, что это исправит ошибку и для будущих читателей!

В заголовочном файле класса, где вы хотите инициализировать ViewController:

@property (strong, nonatomic) DateSubviewController * dateSubviewController;

Затем инициализируйте его следующим образом:

    self.dateSubviewController = [[DateSubviewController alloc] init];
person Git.Coach    schedule 08.05.2012

Судя по ошибке, вам должно быть ясно, что dataSource вашего tableView не отвечает методу, который нужен tableView. Поскольку я предполагаю, что у вас уже есть объект, который должен быть этим источником данных (тот, который реализует tableView:numberOfRowsInSection:), вполне вероятно, что вы установили свойство dataSource tableView не для этого объекта, а для другого. Проверьте свой код или свои Xib и исправьте ссылку dataSource вашего tableView.

Сделайте это первым.

После этого у вас могут возникнуть другие проблемы. Ты увидишь. Но сначала исправьте это и научитесь читать и понимать свои ошибки. Задокументируйте слова, которые вы не понимаете, такие как «экземпляр», «селектор», «исключение». Понимание ошибок является ключом к успешной отладке.

person Gwendal Roué    schedule 08.05.2012
comment
Спасибо за ответ, но я все это сделал. Я реализую методы tableView, и tableView правильно подключен к раскадровке. Я студент ИТ и знаю об экземплярах, селекторах и исключениях. Я сделал все, что мог, чтобы исправить эту ошибку, но не могу понять. - person Git.Coach; 08.05.2012