我有这个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];
没有变化。
我缺少什么?
答案 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然后它就可以工作。