TableViewController中的TableView,重装数据和indexPathForSelectedRow都不起作用

时间:2014-08-30 22:15:08

标签: ios objective-c uitableview reloaddata

在决定寻求帮助之前,做了很多关于我的问题的研究。希望你能够提供帮助

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的原因,滚动得越多,得到的就越暗。

这是我的故事板设置方式: &#34;查看&#34;链接到我的blackView和&#34;表视图&#34;在我的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的更改,我必须重建应用程序才能使更改正确显示)

我的segue在CellForRowAtIndexPath

中触发
[self performSegueWithIdentifier:@"showDetails" sender:self];

3 个答案:

答案 0 :(得分:0)

我认为有两个问题。查看NSLog语句

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

应该是.row

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

并检查viewWillAppear,如果tableView不是nil

答案 1 :(得分:0)

好的,谢谢你们,问题确实是我没有用正确的方法触发performSegue。

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

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

}

使用此代码可以完美运行。 现在我猜这两个问题没有关联,但你对reloadData有什么看法吗?

答案 2 :(得分:0)

  

现在我猜这两个问题没有关联,但你对reloadData有什么看法吗?

可能你没有为表设置dataSource吗?

self.tableView.dataSource = self