Ios presentViewController后的黑屏

Ios presentViewController后的黑屏,ios,objective-c,cocoa-touch,uiviewcontroller,Ios,Objective C,Cocoa Touch,Uiviewcontroller,我得到了一个名为SecondViewController的UIViewController,它使用UIImagePickerController加载照片库。当我选择照片时,它应该显示另一个名为PhotoViewController的视图控制器。要将图像从SecondViewController传递到PhotoViewController,我使用单例。代码如下: 第二视图控制器: @property (strong,nonatomic) UIImagePickerController *libra

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

第二视图控制器:

@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;
}
PhotoViewController:

@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;
}
因此,当我选择一张图片时,应用程序会在调试区域显示一个没有错误的黑屏。怎么了

附言:我正在使用故事板和ARC来记录一些事情:

  • 如果在情节提要中设计了
    PhotoViewController
    ,则在
    sharedInstance
    中实例化它的方式不正确。它只创建一个普通的
    PhotoViewController
    ,没有创建任何Interface Builder对象。
    • 在这里,更好的方法是将
      SecondViewController
      PhotoViewController
      的场景与故事板中的手动模式序列连接起来。然后,在
      中的
      SecondViewController
      中,使用信息完成PickingMediaWithInfo
      ,在PhotoViewController上设置照片并手动触发segue
  • PhotoViewController
    viewDidLoad
    将只调用第一个 时间到了,所以这不是拍摄照片的合适地点 随后的发射。考虑<代码> VIEW会出现
  • 确认属性和接口之间已连接
    photoView
    情节提要中的生成器元素