2016-08-29 4 views
0

У меня возникли проблемы с сбоем, возникающим при изменении контроллеров представления. В принципе у меня есть VC, который берет данные от пользователя для поиска - он затем выводит новый VC с поиском результаты, отображаются в UITableView (не используя UITableViewController, просто TableView внутри обычного UIViewController)Ошибка UITableView, несмотря на то, что cellForRowAtIndexPath возвращает действительную ячейку

Краш Вход:

2016-08-29 20: 48: 03.950 MyApp [2596 : 60877] *** Ошибка подтверждения в - [SearchResultsTable _confi gureCellForDisplay: forIndexPath:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.60.7/UITableView.m:7971

2016-08-29 20: 48: 03,961 MyApp [ 2596: 60877] Завершение приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «UITableView (; layer =; contentOffset: {0, 0}; contentSize: {375, 1128}>) не удалось получить ячейку из своего dataSource (; layer =; contentOffset: {0, 0}; contentSize: {0, 0}>) ' *** Первый стек вызовов броска:

Я прочитал, что эта проблема вызвана не возвращая клетки в вашей cellForRowAtIndexPath функции, однако я уверен, что моя реализация будет возвращать ячейку успешно. (Я тестировал код функции где-то еще, и cell это на самом деле имеет значение, а не ноль.)

Код:

@property searchResultCell * cell;

-(UITableViewCell*)cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    _cell = [self dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

    if (_cell == nil) 
    { 
     _cell = [[searchResultCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 

    [[_cell txtDate] setText:@"test"]; 
    return _cell; 
} 

Разместив несколько контрольных точек что этот раздел кода никогда не выполняется, несмотря на то, что класс UITableView, делегат и источник данных правильно установлены.

viewDidLoad для результатов поиска VC ([self SpecifiedSerial] установлено ранее, прежде чем переходить происходит Это NSString*.):

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

_SearchResultsTableDelegate = [[searchResultsTable alloc] init:[self specifiedSerial]]; 

[[self SearchResultsTable] setDelegate:_SearchResultsTableDelegate]; 
[[self SearchResultsTable] setDataSource:_SearchResultsTableDelegate]; 
} 

Объявления:

@property (weak, nonatomic) IBOutlet UITableView *SearchResultsTable; 
@property searchResultsTable * SearchResultsTableDelegate; 

Если кто-то может мне точку в правильном направление здесь, было бы очень признательно!

+0

Можете ли вы показать, где и когда вы это называете? –

+0

Попробуйте этот UITableViewCell * _cell = [yourTableView dequeueReusableCellWithIdentifier: @ "cell"]; if (_cell == nil) { _cell = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: @ "cell"];} – Signare

+0

Показать больше кода, почему делегат не устанавливает себя как делегат таблицы? – Wain

ответ

1

Используйте этот код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    _cell = [tableView dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

Вместо:

-(UITableViewCell*)cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    _cell = [self dequeueReusableCellWithIdentifier:@"cell" forIndexPath:indexPath]; 

Edit:

Ваш numberOfRowsInSection и numberOfSectionsInTableView кажется неверным.

Попробуйте этот код:

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
    return 1; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    return [[self searchedTrainSightings] count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    _cell = [tableView dequeueReusableCellWithIdentifier:@"MyCell" forIndexPath:indexPath]; 

    if (_cell == nil) 
    { 
     _cell = [[MyCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 

    [[_cell textLabel] setText:@"test"]; 
    return _cell; 
} 
+0

Не удалось устранить проблему, однако после того, как я ее изменил, я получил предупреждение - очевидно, этот метод никогда не используется. – Swemoph

+0

'numberOfSectionsInTableView' и' numberOfRowsInSection' реализованы? –

+0

Было бы полезно, если вы разместите еще несколько кода. –

0

Я серьезно сомневаюсь, метод делегата, который вы используете.Я видел этой версию cellForRowAtIndexPath метода

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

Попробуйте это

- (UITableViewCell *)tableView:(UITableView *)tableView 
     cellForRowAtIndexPath:(NSIndexPath *)indexPath { 
    _cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; 

    if (_cell == nil) 
    { 
     _cell = [[searchResultCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 

    [[_cell txtDate] setText:@"test"]; 
    return _cell; 
} 
1

вероятно причина вы возвращаете ноль из cellForRowAtIndexPath метода и не в состоянии из очереди многоразовых клеток.

код использование:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    searchResultCell *cell; 
    cell = (searchResultCell *)[tableView dequeueReusableCellWithIdentifier:@"cell"]; 

    if (cell == nil){ 
     cell = [[searchResultCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 
    } 

    [[_cell txtDate] setText:@"test"]; 
    return cell; 
} 

И просто настроить ячейку выбора пользовательской ячейка дает cell идентификатора с помощью раскадровки см изображения. enter image description here

Надеюсь, это поможет.

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