ios - 将 UIImage 从 View Controller 传递到另一个

标签 ios objective-c cocoa-touch parse-platform

我想将 UIImage 从 View Controller 传递给另一个,但它不起作用。如果我在第二个 View Controller 中记录 UIImage 值,我实际上得到 (null)。

图像文件来自 parse.com。它在第一个 View Controller 中工作得非常好。但是一旦我将它传递给第二个 View Controller ,图像就不会在那里工作。

这是代码:

我在 firstViewController (BookListTableViewController) 的 .m 文件中的 prepareForSegue

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

    NSIndexPath *indexPath = [self.bookListTableView indexPathForSelectedRow];
    ParseBookDetailTableViewController *pbdtvc = segue.destinationViewController;

        PFObject *tempObject = [totalStrings objectAtIndex:indexPath.row];

        PFFile *eventImage = [tempObject objectForKey:@"bookImage"];

        if(eventImage != NULL)
        {

            [eventImage getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error)
             {

                 UIImage *thumbnailImage = [UIImage imageWithData:imageData];


                 pbdtvc.bookImageDetail = thumbnailImage;

             }];

        }

我的 secondViewController (ParseBookDetailViewController) 的 .h 文件
@property (strong, nonatomic) UIImage* bookImageDetail;
@property (strong, nonatomic) IBOutlet UIImageView *bookImageDetailView;

我的 secondViewController (ParseBookDetailViewController) 的 .m 文件的 viewDidLoad
NSLog(@"%@",bookImageDetail);
[bookImageDetailView setImage:bookImageDetail];

正如我所说:在原始 View Controller 中,图像是正确的。我可以记录它,甚至将它设置为 ImageView。但是在第二个 View Controller 中有(null)。

很高兴得到帮助,谢谢..

编辑:

这是我的 cellForRowAtIndexPath 中的代码。
PFObject *tempObject = [totalStrings objectAtIndex:indexPath.row];
    //cell.textLabel.text = [tempObject objectForKey:@"bookTitle"];
    cell.titleTextField.text = [tempObject objectForKey:@"bookTitle"];
    cell.bookAutor1Label.text = [tempObject objectForKey:@"bookAutor1"];
    cell.isbnLabel.text = [tempObject objectForKey:@"bookISBN"];

    cell.statusLabel.text = [tempObject objectForKey:@"bookStatus"];
    cell.yearLabel.text = [tempObject objectForKey:@"BookDate"];


    if ([cell.statusLabel.text isEqualToString:@"nicht verfügbar"]) {
        cell.statusLabel.tintColor = [UIColor redColor];
        cell.dotImageIcon.image = [UIImage imageNamed:@"dot_red.png"];

    }else if ([cell.statusLabel.text isEqualToString:@"verfügbar"]){
        cell.statusLabel.tintColor = [UIColor greenColor];
        cell.dotImageIcon.image = [UIImage imageNamed:@"dot_green.png"];
    }

    PFFile *eventImage = [tempObject objectForKey:@"bookImage"];

    if(eventImage != NULL)
    {

        [eventImage getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error)
         {

             UIImage *thumbnailImage = [UIImage imageWithData:imageData];

             prepareForSegueImage = thumbnailImage;

             [cell.bookImageView setImage:thumbnailImage];

         }];

    }

在底部,我在一个新属性(prepareForSegueImage)中设置了图像(有效)。现在它已加载。

现在我尝试只将 prepareForSegueImage 传递给新的 View Controller ,但它实际上并没有传递单元格中的那个,它传递了从第一个 View Controller 加载到整个 TableView 中的最后一个。

最佳答案

我正在猜测:

[eventImage getDataInBackgroundWithBlock:^(NSData *imageData, NSError *error)
{
    UIImage *thumbnailImage = [UIImage imageWithData:imageData];
    pbdtvc.bookImageDetail = thumbnailImage;
}];

是在后台发生的异步请求,需要一些时间才能返回。但是您的代码期望它立即发生。

先加载图片,在完成 block 中调用segue,

编辑

如果它在第一个 viewController 中工作(意味着你有图像)你为什么要再次请求它?为什么不简单地传递您已经拥有的图像?

编辑 2:

正如我在评论中所解释的,每次 cellForRowAtindexPath 都会覆盖您的变量。叫做。您可以将该代码包装在 if 语句中,检查索引或某个图像等,或者您可以使用下面的代码获取特定单元格并将图像拉出。
[tblView cellForRowAtIndexPath: [NSIndexPath indexPathForRow:2 inSection:0]];

如果您已经下载了图像并且有一个相对简单的方法来获取它的引用,那么您不应该再次下载它。这可能会使用户花费 3G 数据计划并浪费资源。

关于ios - 将 UIImage 从 View Controller 传递到另一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22554994/

相关文章:

ios7取消3次后无法登录gamecenter gain

ios - Swift - 如何将数据从 UITableViewCell 类传递到 UIViewController

iPhone - 使图像适应视网膜显示

objective-c - 自定义函数内的空数组

ios - Easy Mapping 不映射 Core Data 一对多关系对象

ios - 无法同时显示两个 CorePlot 图

objective-c - 了解 Objective-C 运行时

objective-c - 复制时谁负责释放数组中的对象?

ios - iOS 水平居中约束

ios - 数据源和委托(delegate)什么时候应该是不同的对象?