PrepareForSegue 总是返回索引为 0 的单元格

Posted

技术标签:

【中文标题】PrepareForSegue 总是返回索引为 0 的单元格【英文标题】:PrepareForSegue always returns cell at index 0 【发布时间】:2014-08-10 16:23:49 【问题描述】:

所以这个问题类似于UITableView - IndexPath always returns 0 first & takes 2 clicks to pass correct data to view controller 此处描述的问题,但是他们建议的答案无助于解决问题,所以我专门询问我的代码。这是我的 prepareForSegue 方法:

//send to a detail version of each of the chatters allowing a report a user 
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

if ([[segue identifier] isEqualToString:@"pushToDetail"])

    ChatterDetailViewController *chatterDetail = [segue destinationViewController];

     UITableViewCell *cell = (UITableViewCell*)sender;

    long indexPathSelected = [self.tableView indexPathForCell:cell].row;

   Chatter *detailChatter = [_arrayWithoutME objectAtIndex:indexPathSelected];

    NSData *fbImageData = [NSData dataWithContentsOfURL:[NSURL URLWithString: detailChatter.url]];

    _detailProfile = [UIImage imageWithData:fbImageData];

   chatterDetail.detailProfile = _detailProfile;
 
 

这显然与另一个问题上建议的答案看起来不同,但是我尝试了它并没有改变任何东西。每当我单击 tableView 单元格时,它就会完成 segue,并且我会从第一个单元格(索引 0)而不是单击它的单元格中看到个人资料图片。我尝试使用

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

但是它没有像我需要的那样传递图像值,而且当我尝试使用展开 segue 返回时,它说导航树已损坏(当前代码不会发生这种情况)。基本上我似乎无法找到为什么选择任何单元格只返回第一个单元格的信息。

编辑:

以下是 Chatter Detail 视图中的一些代码确实加载方法:

- (void)viewDidLoad

   [super viewDidLoad];
   self.navigationItem.hidesBackButton = YES;
   _detailProfilePicture.contentMode = UIViewContentModeScaleAspectFill;
   _detailProfilePicture.image = _detailProfile;
   [_detailProfilePicture sizeToFit];

 

同样,它确实返回了一张图片,但它只是索引为 0 的单元格中的图片。

【问题讨论】:

发件人日志给你什么? 从发件人那里我得到一个 > 这是正确单元格的信息 我看错了你的最后一行,没关系,你传递了图像,所以我删除了我的第二条评论。那么,如果您记录 indexPathSelected,无论您单击哪个单元格,它是否始终为 0?你是否实现了 didSelectRowAtIndexPath? 我现在没有,我之前试过。发生的事情就像我发布的问题链接中发生的事情一样。只有在我点击了不同的单元格后,它才会返回我点击的单元格的正确图像(点击索引 1,获取 null,点击索引 2 从索引 1 获取图像)。当我试图直接从中分离时,它崩溃并说我损坏了导航树。 因此,您需要进行一些日志记录以缩小问题范围。无论您单击哪一行,indexPathSelected 的日志是否总是给您 0?如果不是,当您单击不同的行等时,_detailProfile 的日志会为您提供不同的图像。 【参考方案1】:

有一种更简单的方法可以为您在 UITableView 中选择的行提取 indexPath:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
if ([[segue identifier] isEqualToString:@"pushToDetail"]) 

    NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];

    // section and row return an int like this:
    NSLog(@"index path: section %i, row %i", indexPath.section, indexPath.row);



但是,您的代码确实给出了正确的行值,并且 long 确实可以用于从 NSArray 获取对象。我会在这个方法的末尾放一个断点或日志消息,看看你的数组中是否真的有正确的值。

我还会检查您在 indexPathSelected 中获得的值 - 这应该反映所选行。

【讨论】:

indexPathSelected 为 0。我试过这个方法,但它仍然返回 0。 self.tableView 是否真的引用了屏幕上的表格视图?快速检查测试:NSLog(@"self.tableView 中的行数:%i", [self.tableView numberOfRowsInSection:0]); 我得到 0,这意味着我实际上并没有引用我认为我认为的内容 所以,我将 tableview 连接到,它确实说我有 9 行进行该测试,但是,当我使用 indexPathForSelectedRow 单击其中一个时,它只返回 0 indexPath.row 怎么样?

以上是关于PrepareForSegue 总是返回索引为 0 的单元格的主要内容,如果未能解决你的问题,请参考以下文章

Segue 不传递正确的行的索引路径总是第 0 节

无法使用 [NSIndexPath] 类型的索引为 [String] 类型的值下标 - prepareForSegue

位置索引在 getView 中总是返回 0

IBAction在iOS7中总是返回0的点击索引[重复]

当从控制器发送到索引时,列表总是返回空值

使用 UINavigationController 返回时是不是有类似 prepareForSegue 的东西?