2015-03-09 3 views
0

В моей программе я устанавливаю ограничения для своего представления, используя nslayoutconstraints.the view состоит из вида tableview, collectionview и основного вида. Когда представление загружается, приложение вылетает с следующая ошибкаtableview nil и приложение сбрасывает ios xcode

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[0]' 

*** Первый стек бросить вызов: (0x27126d67 0x34c61c77 0x27047237 0x2704701b 0xe1333 0xe0bc1 0x1c6ca7 0x1d24e1 0x9b59cb 0x9b59b7 0x9b9411 0x270ecc41 0x270eb361 0x27038981 0x27038793 0x2e3e8051 0x2a62a981 0x1d72b5 0x351fdaaf) LibC++ abi.dylib: оканчивающиеся неперехваченное исключение типа NSException

Значение Tableview является «NIL»

NSDictionary *viewsDictionary = @{@"tableView":_tableView, 
            @"mainView": _mainView, 
            @"movieDetail":_movieDetailView 
            }; 

Этот словарь используется для установки ограничения высоты в Tableview ниже

NSArray *constraint_V = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[tableView(tableHeight)]" 
                   options:0 
                   metrics:metrics 
                    views:viewsDictionary]; 

[_tableView addConstraints:constraint_V]; 

Почему значение Tableview равна нулю? Этот tablview представляет собой IBOUTLET из раскадровки. Когда я произвольно выделяю память программным кодом, но tableview не загружается данными. Может ли кто-нибудь объяснить мне причину?

Спасибо заранее

+0

Вы дважды отметили, что UITableView действительно связан с этим свойством? – Eike

+0

Да, это та же таблица, когда вызывается с другой страницы, работает отлично. Вы знаете, почему это происходит? – abhi1992

+0

Боюсь, не без лишнего контекста. Как rstewart, упомянутый ниже: где выполняется этот код? Кроме того, я не понимаю, что вы имеете в виду: «Когда я произвольно выделяю память, код запускает. Но tableview не загружается данными». Вы могли бы поделиться каким-то примером? – Eike

ответ

0

Убедитесь, что вы не называете это слишком рано, и вид таблицы еще не был создан. Возможно, вы выполняете этот код в «viewDidLoad», возможно, попробуйте viewWillAppear или viewDidLayoutSubviews.

+1

viewDidLoad идеально подходит для этого: «Этот метод вызывается после того, как контроллер представления загрузил свою иерархию представлений в память. Этот метод вызывается независимо от того, была ли иерархия представлений загружена из файла nib или создана программно в методе loadView . ". – Eike

0

Пожалуйста, убедитесь, что вы правильно синтезировали это свойство.

@synthesize yourIBOutletTableView = _tableView; 
+0

По крайней мере, если имя IBOutlet является «tableView», как в UITableViewController, здесь нет необходимости синтезировать. – Eike

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