【问题标题】:Black screen after presentViewControllerpresentViewController 后黑屏
【发布时间】:2014-01-17 16:26:21
【问题描述】:

我有一个名为 SecondViewController 的 UIViewController,它使用 UIImagePickerController 加载照片库。当我选择一张照片时,它应该呈现另一个名为 PhotoViewController 的视图控制器。要将图像从 SecondViewController 传递到 PhotoViewController,我使用了单例。代码如下:

SecondViewController:

@property (strong,nonatomic) UIImagePickerController *libraryPicker;
@property (strong,nonatomic) UIImage *chosenImage;
@property (strong,nonatomic) PhotoViewController *controller;

- (void)viewDidLoad
{
        controller = [PhotoViewController sharedInstance];
        libraryPicker = [[UIImagePickerController alloc] init];
        libraryPicker.delegate = self;
        libraryPicker.allowsEditing = NO;
        libraryPicker.navigationBarHidden = NO;
        libraryPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
        [self presentViewController:libraryPicker animated:YES completion:nil];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    chosenImage = [info objectForKey:UIImagePickerControllerOriginalImage];
    controller.photo = chosenImage;
    [libraryPicker dismissViewControllerAnimated:NO completion:nil];
    [self presentViewController:controller animated:YES completion:nil];
}

照片视图控制器:

@property (strong,readwrite) IBOutlet UIImageView *photoView;
@property (strong,readwrite) UIImage *photo;
+ (PhotoViewController *)sharedInstance;

static PhotoViewController *_self;
+ (PhotoViewController*)sharedInstance
{
    if (_self == nil) {
        _self = [[super alloc] init];
    }
    return _self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    photoView.image = photo;
}

所以当我选择图片时,应用程序会在调试区域显示黑屏且没有错误。怎么了?

P.S.:我正在使用 Storyboard 和 ARC

【问题讨论】:

    标签: ios objective-c cocoa-touch uiviewcontroller


    【解决方案1】:

    注意几点:

    • 如果在情节提要中设计了PhotoViewController,则在sharedInstance 中实例化它的方式不正确。它只是创建一个普通的PhotoViewController,没有创建任何 Interface Builder 对象。
      • 这里更好的方法是将SecondViewControllerPhotoViewController 的场景与情节提要中的手动模态segue 连接起来。然后在SecondViewControllerdidFinishPickingMediaWithInfo中,在PhotoViewController上设置照片并手动触发segue。
    • viewDidLoadPhotoViewController 只会被称为第一个 它的呈现时间,所以它不是设置照片的正确位置 随后的发射。考虑viewWillAppear
    • 确认photoView在属性和接口之间连接 故事板中的构建器元素

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多