2017-08-02 8 views
0

私のアプリでは、ユーザーはビデオを録画できます。彼らはビデオを記録した後、配列に追加され、サムネイルでテーブルビューに配置され、ビデオを選択して見ることができます。しかし、私はビデオを記録し、それがテーブルビューに行く場合、私はアプリの終了後にビデオがなくなった。ビデオとそのサムネイルをアプリのディレクトリに保存して取得する

ビデオをユーザーのカメラロールに保存せずに保存し、後で再びアプリケーションを開いたときに取得する最もよい方法は何ですか。コアデータについては読んだが、推奨されていないと聞いた。そうするより良い方法はありますか?

誰かが私にこのことを説明してもらえますか?私はディレクトリを扱うのが非常に悪いです。私はほとんど経験していません。

私はここで、このファイルの場所にビデオを録画:

self.movieFileOutput.startRecording(toOutputFileURL: URL(fileURLWithPath:self.videoFileLocation()), recordingDelegate: self) 


func videoFileLocation() -> String { 
    let dateFormatter = DateFormatter() 
    dateFormatter.dateStyle = .long 
    dateFormatter.timeStyle = .long 
    let date = dateFormatter.string(from: Date()) 
    return NSTemporaryDirectory().appending("videoFile\(date)") 
} 

ビデオが録画終了すると、私はこの配列に追加します。

var videosArray: [URL] = [URL]() 

は、私はこの方法を使用して、各動画のサムネイルを取得:

func getThumbnail(_ outputFileURL:URL) -> UIImage { 

    let clip = AVURLAsset(url: outputFileURL) 
    let imgGenerator = AVAssetImageGenerator(asset: clip) 
    let cgImage = try! imgGenerator.copyCGImage(
     at: CMTimeMake(0, 1), actualTime: nil) 
    let uiImage = UIImage(cgImage: cgImage) 
    return uiImage 

} 

私は、ここでこの配列に追加します:

var thumbnails = [UIImage]() 

がどのように私はこれらのビデオを作成し、そのことができますユーザーがアプリを終了するとサムネイルが消えません。私は非常に不満を持っているので、本当に助けが必要です。

は、それらを保存することにする最良の方法は、でしょう:

  • ユーザデフォルト
  • CoreData
  • がストレートディレクトリから
  • またはその他の提案をそれらを取得あなたが持っているかもしれません。

これを行う方法を教えてもらえますか?私は詳細な答えが必要でした。ありがとうございました。

答えて

1

録画用のすべてのメタデータをコアデータに保存し、すべてのビデオと画像データをファイルシステムに保存することをお勧めします。長さ、タイトル、作成者、作成日、変更日、タグなど、テーブルビューに表示したいメタデータをコアデータストアに保存するには、ファイルを読み込んで生成することもできますが、データベースからロードするほうが速くなります。ビデオとサムネイルをドキュメントディレクトリ(一時ディレクトリではない)に格納し、ファイルへの相対パスをコアデータに保存します。絶対パスではなく相対パスを使用してください。これは、アプリケーションのアップグレード時またはiTunes経由での復元時に、アプリケーションディレクトリが変更される可能性があるためです。

ビデオの作成日に基づいてファイルの名前を付けているようです。私はこれに対してお勧めします。日付フォーマッタは複雑で、ロケールやタイムゾーンなどのシステム設定に基づいて変更できます。代わりにコアデータに格納するUUIDに基づいてファイルの名前を付けることをお勧めします。

要約する:ドキュメントディレクトリ内のファイル

  1. ストア - ないテンポラリディレクトリ
  2. コアデータに保管し、すべてのファイルのメタデータを。
  3. 保存コア・データでビデオファイルとサムネイルファイルへの相対パス
  4. UUIDを使用して、ファイルに名前を付けて - 私はこれを理解していない日付文字列
+0

。私は絶対的ではなく相対的なものとしてそれらを格納することを意味するものを理解していません。これを乗り越えることができますか? –

+0

私はcoredataにURLを保存しても、私はアプリを再起動すると、ファイルはもう存在しないようです。これが相対ファイルのURLを提案した理由です。私はそれを使う方法もわかりません。 –

+0

アプリケーションを再起動すると、NSDocumentDirectoryに保存されたファイルがそこに保存されます。 –

関連する問題