通过 Segue 将缓存图像传递给 DetailViewController

Posted

技术标签:

【中文标题】通过 Segue 将缓存图像传递给 DetailViewController【英文标题】:Passing Cache Image Via Segue to DetailViewController 【发布时间】:2016-08-28 11:13:29 【问题描述】:

我正在使用数据任务通过 JSON 文件显示来自外部服务器的文本数据。这工作得很好 我正在使用 AFNetworking 的文件 #import "UIImageView+AFNetworking.h" 从 Tableview 的 Cell 声明中从上面提取的数据中下载图像,它也工作得很好。 But when selecting a row to pass selected rows Image via Segue to another view controller it giving error,

这是我的 Tableview 单元格代码,非常好,可以显示文本和图像数据

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

    Categories * CategoryObject;
    CategoryObject = [categoryArray objectAtIndex:indexPath.row];
    cell.textLabel.text = CategoryObject.categoryTitle;

    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;

    // Configure the cell Image...

    NSURL *url = [NSURL URLWithString:CategoryObject.categoryImage];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    UIImage *placeholderImage = [UIImage imageNamed:@"placeholder"];
    __weak UITableViewCell *weakCell = cell;
    [cell.imageView setImageWithURLRequest:request placeholderImage:placeholderImage success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) 
        weakCell.imageView.image = image;
        [weakCell setNeedsLayout];
     failure:nil];

    return cell;   

现在看看 Segue 代码会报错

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

        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
       DetailImageViewController *destViewController = segue.destinationViewController;
        destViewController.imageName = [ UIImageView objectAtIndex:indexPath.row.image];

    

我的代码给出错误

选择器objectAtIndex:没有已知的类方法

在代码的最后一行

destViewController.imageName = [ UIImageView objectAtIndex:indexPath.row.image];

我想要完成的事情是解决此错误并传递通过 AFNetworking 下载的缓存图像并将该图像传递到 segue 以显示在下一个视图控制器中。谁能帮帮我?

【问题讨论】:

'objectAtIndex' 适用于数组。 'UIImageView' 不是数组。 'indexPath.row' 是一个数字。数字没有“图像”属性。换句话说,那行代码太错误了,我无法猜测它应该访问什么值。 @philiip Mills,是的,你是对的,因此我需要知道我们应该在这行代码中传递哪个值,而我通过上面的 AFNetworking 代码提取图像。我在 cmets // Configure the cell Image... 中声明的地方 【参考方案1】:

查看您的代码,您似乎正在访问UIImageView 上的objectAtIndex: 方法,除非您有扩展UIImageView 的类别类,否则该方法没有该方法。如果你要处理原始选择,它应该是这样的,

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 

    if ([segue.identifier isEqualToString:@"showAnotherView"]) 
    
        NSIndexPath *indexPath = [self.tableView indexPathForSelectedRow];
        UITableViewCell * cell = [self.tableView cellForRowAtIndexPath:indexPath];
        DetailImageViewController *destViewController = segue.destinationViewController;
        destViewController.imageName = Cell.imageView.image;

    

希望对您有所帮助。

【讨论】:

无法清除,请您使用建议的代码解决问题吗? 这一次你的代码非常适合,但是编译器提示我改变它有一个小错误。那是在最后一行的Cell.imageView.image; 那里更正为cell.imageView.image; 我的意思是有一个小的c 而不是cell 的大写c。非常感谢,您解决了我的应用程序的一个主要问题。

以上是关于通过 Segue 将缓存图像传递给 DetailViewController的主要内容,如果未能解决你的问题,请参考以下文章

通过 Collection View Cell Swift 中的 segue 将图像传递给另一个视图控制器

如何通过 segue 将图像传递到新的视图控制器?

UIImageView 将 (segue) nil 传递给另一个 ViewController

使用 segue 传递图像的指针类型不兼容?目标c Xcode

如何在不使用 segue 的情况下在视图控制器之间传递图像

如何将数据从先前的 segue 传递给子视图控制器?