2014-08-30 2 views
0

Прошло много исследований о моей проблеме, прежде чем принимать решение о вашей помощи. Надеюсь, что вы будете в состоянии помочьTableView в TableViewController, перезагрузка данных и indexPathForSelectedRow не работают

У меня есть tableView внутри ViewController и я не могу перезагрузить данные

[[self.tableView indexPathForSelectedRow]row] всегда возвращает 0

я вещь две проблемы связаны между собой, я просто не знаю почему. Вот мой код:

.h файл

@interface IITableViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> 
    @property (strong, nonatomic) UIView *blackView; 
    @property (strong, nonatomic) IBOutlet UITableView *tableView; 
@end 

blackView является причиной, почему я выбрал ViewController вместо TableViewController, тем больше вы перечисляете, тем темнее она становится.

Это как моя раскадровка установлен: «Вид» связан с моей blackView и «Table View» к моим tableView, мой blackView находится позади tableView.

Вот остальная часть кода:

viewWillApear

[super viewWillAppear:animated]; 
[self.tableView reloadData]; 
... 

numberOfSectionsInTableView

return 2; 

numberOfRowsInSection

if (section==0) { 
     return 1; 
    } 
else { 
     return self.dreams.count; 
    } 

cellForRowAtIndexPath

if (indexPath.section == 0) {  
    IIEntryCell *cell = [tableView dequeueReusableCellWithIdentifier:@"TitleCell" forIndexPath:indexPath]; 
    ... 
    return cell; 
} 
else { 
    IIEntryCell *cell = [tableView dequeueReusableCellWithIdentifier:@"EveryCell" forIndexPath:indexPath]; 
    ... 
    NSLog(@"%ld", (long)[indexPath row]); 
    return cell; 
} 

Все хорошо отображено, мой NSLog возвращает правый номер ячейки.

prepareForSegue

if ([segue.identifier isEqualToString:@"showDetails"]) { 

    IIDetailViewController *detailViewController = [segue destinationViewController]; 
     detailViewController.dreamEntry = [self.dreams objectAtIndex:[self.tableView indexPathForSelectedRow].row]; 
     NSLog(@"%ld",(long)[[self.tableView indexPathForSelectedRow]row]); 

     [self.tableView reloadData]; 

    } 

self.dreams является NSArray, где мои данные хранятся

Дело в том, что здесь NSLog всегда возвращает 0

И когда я вернусь на этот View Controller мой данные не перезагружаются (несмотря на изменения, внесенные в источник данных, который, кстати, является Sqlite, я должны восстановить приложение для изменения отображались правильно)

Мой переход срабатывает в CellForRowAtIndexPath

[self performSegueWithIdentifier:@"showDetails" sender:self]; 
+0

Похоже, что свойство 'tableView' на вашем контроллере равно нулю. Вы не забыли подключить настольный вид к этой розетке в своем раскадровке? – Jonah

+0

Я почти shure, плюс, если я добавлю 'NSLog (@"% @ ", self.tableView);' Я получаю это ; layer = ; contentOffset: {0, 0}> –

+0

Как вы вызываете segue? Из 'didSelectRowAtIndexPath'? Если да, можете ли вы показать этот метод. Вероятно, выбранная строка была очищена, так как вы получаете 0 – Paulw11

ответ

0

Я думаю, что есть две проблемы. Ознакомьтесь с заявлением NSLog

NSLog(@"%ld",(long)[[self.tableView indexPathForSelectedRow]row]); 

это должно быть.ряд

NSLog(@"%ld",(long)[[self.tableView indexPathForSelectedRow].row]); 

и проверить в viewWillAppear если Tableview не ноль

+0

Это ничего не меняет, и мой tableView не равен нулю:/ –

+0

Что делать, если вы закомментируете [self.tableView reloadData]; в подготовке к segue. В чем его причина? – Yan

+0

Является ли ячейка фактически выбрана, когда вы вызываете pefromSegue? – Yan

0

Хорошо, спасибо, ребята, на самом деле проблема заключалась в том, что я не вызвал performSegue соответствующим способом.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    [self performSegueWithIdentifier:@"showDetails" sender:self]; 

} 

С помощью этого кода он отлично работает. Теперь я думаю, что две проблемы не связаны, но у вас есть идея о reloadData?

0

Теперь я думаю, что две проблемы не связаны, но у вас есть идея о reloadData?

Возможно, вы не установили dataSource для таблицы?

self.tableView.dataSource = self 
+0

Действительно, я этого не сделал, я установил делегат, но не dataSource. К сожалению, это ничего не изменило, но если я получу свои данные в viewWillAppear, а не в методе viewDidLoad, это работает, все в порядке? –