1

次のようなストーリーボードがあります。

絵コンテ

これがどのように機能するかです: は、その .m ファイルで次InitialSlidingViewControllerのようにナビゲーション VC をインスタンス化します。topViewController

 -(void)viewDidLoad {
  [super viewDidLoad];

  self.topViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"Navigation"];

}

Navigation VC がインスタンス化されると、基礎となる Menu が作成され、それが underLeftVC として設定されます。これはECSlidingViewControllerを使用しています。これにより、Facebook と同様に、パン ジェスチャを使用するスライド メニューが作成されます。

NavigationVC のルート VC は、私の ItemsCDTVC です。+ ボタンをクリックすると、アクション シートがポップアップ表示され、カメラから写真を撮ったり、フォト ライブラリから写真を選択したりできます。ただし、ManageItemVC にモーダルでセグエして、選択した/撮ったばかりの画像を UIImageView に設定します。提示しようとすると、次のエラーがスローされます。

Warning: Attempt to present <ManageItemViewController: 0x81d52a0> on <InitialSlidingViewController: 0x8122ce0> whose view is not in the window hierarchy!

InitialSlidingVC が画面上になく、ItemCDTVC が画面上にあるため、どちらが正しいのですが、これを修正するにはどうすればよいですか?

下部のフレキシブル スペースの識別子を使用して、ストーリーボードにモーダル タイプ セグエを設定しました (タップしても何も起こらないので、ビジュアル セグエを作成するためにそれを選択しました)。これは、ItemCDTVC の私のセグエ コードです。

 -(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // let's get the edited image
    UIImage *image = info[UIImagePickerControllerEditedImage];
    // but if for some reason we disable editing in the future, this is our safeguard
    if(!image) image = info[UIImagePickerControllerOriginalImage];
    if(image) {
        self.pictureImageView.image = image;
        [self performSegueWithIdentifier:@"addItemSegue" sender:self];
    }
    [self dismissViewControllerAnimated:YES completion:nil];
}

 -(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if([segue.identifier isEqualToString:@"addItemSegue"]){
        ManageItemViewController *manageItemVC = (ManageItemViewController *)[segue destinationViewController];
        manageItemVC.pictureImageView = self.pictureImageView;
    }
}

モーダル VC を提示しようとすると失敗します。

4

1 に答える 1

5

私がしなければならなかった唯一のことは、セグエを実行しようとする前に imagePickerController を閉じることでした。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // let's get the edited image
    UIImage *image = info[UIImagePickerControllerEditedImage];
    // but if for some reason we disable editing in the future, this is our safeguard
    if(!image) image = info[UIImagePickerControllerOriginalImage];
    if(image) {
        self.pictureImage = image;
        [self dismissViewControllerAnimated:NO completion:^{
            [self performSegueWithIdentifier:@"addItemSegue" sender:self];
        }];
    }
}
于 2013-05-09T19:43:43.547 に答える