0

デバイスを iOS 5 にアップグレードしたところ、アプリがクラッシュしました。ナッツ... カメラアプリです。ビデオを記録します。playMovieキャプチャしたビデオを再生する手順があります。その関数は、ビデオ ファイルを指すNSURLパス ( ) を使用してを作成する必要があります。NSStringしかし、NSURL作成は でクラッシュしexc_bad_accessます。これを解決しようとして2泊しましたが、うまくいきません。問題が古いバージョンの xcode 3.2.5 であると疑い始めています。これがスニペットです...

    - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
    /// after I verify that file type is movie ....
    videoFilePath = [[info objectForKey:UIImagePickerControllerMediaURL] path];
    NSURL    *url    =   [NSURL fileURLWithPath:videoFilePath];
    ... at this point the app crashes. 

すでに試しました:
-NSURL作成を playMovie proc から内部に移動しますdidFinishPickingMediaWithInfo(上記のように)。それでもクラッシュします。
- 追加isDirectory:NO]。まだクラッシュします。
- パス文字列をログに出力します... パスは問題ないようです (空でも上書きでもありません)
- をコメントアウトしNSURL、MOV ファイルを再生せずに保存します。正常に動作します。しかし、映画を再生するには URL が必要です。

デバイス ログ:

例外の種類: EXC_BAD_ACCESS (SIGSEGV)

例外コード:KERN_INVALID_ADDRESS at 0x10000010

コンソール メッセージ:

データ フォーマッターは一時的に利用できません。「続行」後に再試行します。(dlopen 関数が見つからないため、共有ライブラリをロードできません。)

--- 詳細を追加 (8/30/12) ---

videoFilePathNSStringmy で宣言されていviewController.hます。があり@property (retain,nonatomic)、合成されています。どこにも割り当てられていないため、定数として使用されます。上記の抜粋されたコードは、メディア URL がどのように割り当てられるかを示していますvideoFilePath(割り当てではなく定数として)。
この後UIActionSheet、ユーザーが「ムービーを再生」、「ムービーを保存」、または「キャンセル」するためのページを開きます (いつか YouTube オプションが追加される予定です)。アクションシートで、ユーザーが選択した場合、PlayMovie(void)playMovie プロシージャを呼び出します。その手順では、*url オブジェクトを宣言し、.xml に格納されているパスで開始しvideoFilePathます。IOS 5 にアップグレードするまでは魅力的に機能しましNSString videoFilePath(void)viewDidLoad。しかし、それは解決しませんでした。
XCODEを4.2にアップグレードしてみました。「データ フォーマッターが一時的に利用できません」というメッセージが表示されなくなりました。しかし、それでもクラッシュしEXC_BAD_ACCESSます。

ありがとう!ありがとう!ありがとう!

4

1 に答える 1

0

どうやら、NSURL オブジェクトからパスを抽出し、そのパスから新しい NSURL オブジェクトを作成しているようです。fileURLWithPath: は何らかの理由でそのパスに満足していません。パスが RFC 1808 に準拠していない可能性があるため、以前のパス呼び出しの結果は videoFilePath == nil になります。

しかし、なぜこの変換を行うのでしょうか? 使用するだけです:

NSURL *url = [info objectForKey:UIImagePickerControllerMediaURL];
于 2012-08-31T16:57:32.463 に答える