2

iPhoneアプリケーションにライブカメラ機能を実装しようとしていますが、問題が発生しています。基本的に、その構造は次のとおりです。ユーザーがテーブルビューと(1つを選択すると)詳細ビューを使用して画像に移動できるUINavigationControllerを提供します。

次に、ボタンをクリックして、カメラで新しい写真を撮ることができます。理想的には、写真を撮ったりキャンセルしたりした後、ナビゲーションルートに戻って画像が再び表示されるようにする必要があります。このために、メインの詳細ビューコントローラ内にUIImagePickerControllerデリゲートを実装しています。

最後のビット(写真などにアクセスできます)を除いて、すべて正常に実装されていますが、最初のリストに戻ろうとすると、popToRootViewControllerAnimatedを使用してEXC_BAD_ACCESSエラーが発生します。関連するコードの縮小版を次に示します(didFinishPickingMediaWithInfo...imagePickerControllerDidCancel同じように機能します)。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {

    // Do some image processing stuff here...

    [picker dismissModalViewControllerAnimated:YES];
    [picker release];

    [self.navigationController popToRootViewControllerAnimated:YES];    
}

最後の行をコメントアウトすると機能しますが、リストではなく、元の写真の詳細ビューに戻ります。

誰?

更新:前に言及しなかった詳細...実際、ポップはある程度機能しているように見えます。カメラピッカーが閉じられ、リストに戻ります。ただし、それはアプリが停止するときです(ユーザーが前にタップした場所から、選択されたテーブルセルはまだ青色です)。代わりに使用してみたところpopViewControllerAnimated、まったく同じ結果になりました。

4

3 に答える 3

4

これがあなたにとって手遅れではないことを願っています。今夜同じ問題に遭遇し、少しクリエイティブになり始める前に、約30分間MBPに頭をぶつけました。

私はこれを機能させる2つの方法を見つけました。どちらも直感的ではありませんが、ここに行きます。基本的に、この問題は、「却下」アニメーションが終了するに、navigationControllerで「pop」を呼び出していることが原因である可能性があります。

却下のアニメーションブール値を「NO」に設定すると、機能することがわかりました。

例えば

[picker dismissModalViewControllerAnimated:**NO**];

もう1つのオプションは、実際に「pop」関数を呼び出す2番目のメソッドを作成し、オフセットが短いタイマーを使用して呼び出すことです。却下アニメーションを実行するのに十分です。

例えば

-(void)popMe {
    [self.navigationController popToRootViewControllerAnimated:YES];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    [picker dismissModalViewControllerAnimated:YES];
    [picker release];

    [self performSelector:@selector(popMe) withObject:nil afterDelay:0.1];   
}

そのタイミングは私のために働いた、あなたは調整しなければならないかもしれない。

お役に立てば幸いです。

  • アンドリュー
于 2009-10-01T01:13:56.107 に答える
1

答え:
これを使用してください:[self.navigationController dismissModalViewControllerAnimated:YES]; [picker dismissModalViewControllerAnimated:YES]の代わりのコード;
これで、コードから次の行を削除できます。[self.navigationController popToRootViewControllerAnimated:YES];

于 2009-08-19T16:06:25.983 に答える
1

ここで問題となるのは、[pickerdismissModelViewController]と[pickerrelease]です...ピッカーを解放する必要はありません。私が信じているモーダルビューコントローラーを閉じると、解放されます。 can s ee)...それまたは参照カウントが0であり、リリースされるべきではありません。いずれにしても、ピッカーをリリースしたためにこのようなことをしてクラッシュしたことを思い出します...また、あなたが持っていることに気づきましたピッカーはモーダルビューコントローラーを閉じます。これがあなたがやろうとしていることであると確信していますか?[self dismissModalViewController]ではなく、そのビューをプッシュしたViewControllerはどれですか?

于 2009-08-19T15:27:54.530 に答える