質問

短縮版:ファイルを要求するのが早すぎると思いますが、準備ができているように見せかけています。何かが足りないのでしょうか?

少し長いバージョン:ファイルをディスクに書き込んでいます。その前に、ユーザーに新しいファイル名などのメタデータを追加してもらいます。ユーザーが作業を完了すると、画面が消え、プログラムがファイルをディスクに書き込みます。ユーザーはファイルのリストを確認できます。このリストは、フォルダーの内容を読み取ることによって生成されます。新しいファイルはファイルのリストにありますが、表示するファイルから情報を抽出しようとすると(例:ファイルサイズ)、プログラムがクラッシュします。私の知る限り、クラッシュは、ファイルが名前どおりに存在しているにもかかわらず、読み取ることができないために発生します。(ちなみに、これらは小さなファイルです - 数百キロです。)

まず、ディレクトリにファイルが表示されていても、まだすべてが存在していないという可能性はありますか?Aおよび2番目に、もしそうなら、ファイルの読み取りができるかどうかを確認するにはどうすればよいですか?

どうもありがとう。

アップデート:

ありがとう。さらに情報を追加してみます。AVAudioRecorderで音声ファイルを録音しています。初期行は次のとおりです。

soundrecording = [[AVAudioRecorder alloc] initWithURL:url settings:recordSettings error:&error];

プログラムは、UI の更新や計測などをすべて実行します。音声が停止したら、次のように呼び出します。

[soundrecording stop];

他のすべてが更新され、次に進む準備ができたら、次のように呼び出します。

[soundrecording release];
soundrecording=NULL;

私が理解している限り、これでファイルが解放されるはずです。

再度、感謝します。

役に立ちましたか?

解決

これで、サンプルコードを追加したことを、私はいくつかのより多くを語ることができます。

まず、クラス参照 stop方法は、ファイルを閉じますと言っているようです。しかし、また起こって根本的なオーディオセッション、そしておそらくいくつかの変換があることを示唆しているようです。私は、私はおそらく、このAPIを使用してiPhoneのボイスメモアプリは、それが完了しています後に長い記録を圧縮するためにいくつかの作業を行う必要があることを思い出して考えてます。

だから私はあなたの直感をサポートしています。私はあなたのファイルがまだ閉じられないかもしれないと思いますが、保存するための適切なフォーマットに記録されたデータを処理している別のスレッドでます。

あなたは、おそらく毎秒したり、ユーザーインターフェイスが元気にできるように、そう、それは完了だときに、ファイルを開こうとするNSTimerを設定したいです。おそらく、その間にメッセージの種類を「しばらくお待ちください」、またはその他のユーザーは、それが働いて知らせます。

を表示したいです

他のヒント

私が最初に行うことは、ファイルがまだ準備ができていないという意見が正しいことを確認することです。これを行うには、プログラムを書いた後、読み取る前に 1 ~ 2 秒間スリープさせます。数百 KB であれば、準備が完了するまでにそれ以上の時間はかかりません。

それでも失敗する場合は、書き込みに使用したファイル ハンドルを閉じていないのではないかと思います。ファイル システムは書き込みを続ける可能性があると判断しているため、読み取りの準備ができていない可能性があります。

通常、ファイルの準備ができているかどうかを確認する方法は、ファイルを開いてみることです。それが成功すると、それを読むことができます。または、エラーで失敗した場合は、エラーを適切に処理できます。

  • コマンド ライン ユーティリティでは、エラーを出力して終了すると、ユーザーは再試行できます。
  • サーバーなど、終了すべきではないバックグラウンド プログラムの場合は、エラーをログに記録できます。遅延後に自動的に再試行することもできます。重大な種類のエラーの場合は、プログラムからそれについて電子メールで送信されるようにすることをお勧めします。
  • GUI ウィンドウ アプリでは、エラー ダイアログまたはパネルを表示して、ユーザーに再試行の機会を与えることが必要な場合があります。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top