将值传递给下一个viewController不起作用

时间:2014-09-25 17:44:33

标签: ios cocoa-touch uitableview segue

我有这个tableViewController,其中包含一个标签和一个imageView,我需要传递给下一个viewController。

在表示第一个VC上的tableViewCells的类和第二个VC上的这些元素被声明为

@property (weak, nonatomic) IBOutlet UIImageView *thumbnail;
@property (weak, nonatomic) IBOutlet UILabel *fileName;

点击一个单元格的公开按钮后,它会触发prepareForSegue:sender:,我喜欢这个

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

  // the user tapped on the disclosure button of a tableView cell... get the cell
  FileManagerTableViewCell *cell = (FileManagerTableViewCell *)sender;

  // this is the next viewController that will show the cell in detail
  FileManagerDetailVC *detail = [segue destinationViewController];

  detail.thumbnail.image  = cell.thumbnail.image;
  detail.fileName.text    = cell.fileName.text;

  // at this point, `cell.thumbnail.image` and `cell.filename.text` **are not nil**
  // if I check `detail.thumbnail.image` and `detail.filename.text` when the detail
  // is presented, they are nil

}

我试图创建新对象,希望问题是细胞对象被释放,所以我这样做了:

  detail.thumbnail.image  = [UIImage imageWithCGImage:[cell.thumbnail.image CGImage]];
  detail.fileName.text    = [NSString stringWithString:cell.fileName.text];

或只是

  detail.thumbnail.image  = [cell.thumbnail.image copy];
  detail.fileName.text    = [cell.fileName.text copy];

没有变化。

我缺少什么?

2 个答案:

答案 0 :(得分:1)

在调用prepareForSegue时,尚未加载目标视图控制器中的视图。奥特莱斯是零。

为数据而不是ui组件创建属性,例如:

@property (strong, nonatomic) NSString *filenameText;
@property (string, nonatomic) UIImage *thumbnailImage;

//in prepareForSegue
detail.thumbnailImage = cell.thumbnail.image;
detail.filenameText = cell.fileName.text;

// and in viewDidLoad of FileManagerDetailVC
self.thumbnail.image = self.thumbnailImage;
self.fileName.text = self.filenameText

那将完成这项工作。

答案 1 :(得分:0)

这里没有创建缩略图,fileName对象,您正在分配作为主要问题的值。只需创建UIImage,NSString类型的属性,然后将这些值分配给thumbnail.image和完整的Name.text然后它就可以工作。