在init之后调用viewDidLoad

时间:2014-02-26 11:31:16

标签: ios objective-c uiimage

我的主要ViewController已嵌入navigation controller我的ViewController CollectionView当我点击custom collectionViewCell时,它会转到下一个View Controller }使用push segue并在我的第二个View Controller中拥有UIImage属性。

点击Collection ViewCell

后,我正在实施以下代码
-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Why did you called me?");
    DetailViewViewController *dvc = [[DetailViewViewController alloc] init];

    ALAsset *asset = self.assets[indexPath.row];
    ALAssetRepresentation *defaultRep = [asset defaultRepresentation];
    UIImage *image = [UIImage imageWithCGImage:[defaultRep fullScreenImage] scale:[defaultRep scale] orientation:0];

    [dvc initWithImage:image];

}

initWithImage方法

-(id) initWithImage:(UIImage *)imageName {
    self = [super init];
    NSLog(@"inithWithImage Called");

    self.image = imageName;

    return self;
}

问题initWithImage之前调用问题viewDidLoad。在initWithImage方法中,我将我的属性UIImage设置为image。但是当我办理登机手续时viewDidLoad 我的媒体资源UIImage等于null

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

您以错误的方式初始化DetailViewViewController。尝试:

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath 
{
    ALAsset *asset = self.assets[indexPath.row];
    ALAssetRepresentation *defaultRep = [asset defaultRepresentation];

    UIImage *image = [UIImage imageWithCGImage:[defaultRep fullScreenImage] 
                                         scale:[defaultRep scale] 
                                   orientation:0];

    DetailViewViewController *dvc = [[DetailViewViewController alloc] initWithImage:image];

    ...
}

答案 1 :(得分:0)

图像需要是segue使用的DetailViewController实例的属性,请查看“准备segue”

问题在于,尽管您正在使用segues,但您手动分配/初始化控制器并设置其属性(当然这与将要呈现的实例完全不同)。

查看herehere

答案 2 :(得分:0)

只需在DetailViewViewController中声明一个变量,并在分配相同实例的同时使用Image pathstring / image名称进行初始化。在使用pathstring / image名称的DetailViewViewController的viewdidload中,将其设置为imageview组件。

-(void)collectionView:(UICollectionView *)collectionView didSelectItemAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"Why did you called me?");
    DetailViewViewController *dvc = [[DetailViewViewController alloc] init];

    //get the path of image
    ....
    ....
    dvc.variablename = imagepath / imagename
}

希望这有帮助。