2016-10-18 9 views
0

AVFoundationでオーディオを録音し、そのファイルをDocumentDirectoryに保存しています。コアデータでは、 "サウンド"エンティティはURLを文字列として保存します。すべてがうまくいっています。しかし、私は疑問に思っています:サウンドエンティティがCore Dataから削除されたとき、DocumentDirectoryからファイルを削除するにはどうすればいいのですか?それとも自動的に起こりますか?Core Dataエンティティを削除すると、DocumentDirectoryのオーディオファイルが削除されますか?

ディスクに保存するための私のコードは:

let directoryURL = NSFileManager.defaultManager().URLsForDirectory(NSSearchPathDirectory.DocumentDirectory, inDomains: NSSearchPathDomainMask.UserDomainMask).first 

    let audioFileName = NSUUID().UUIDString + ".m4a" 
    let audioFileURL = directoryURL!.URLByAppendingPathComponent(audioFileName) 

    // URL for Core Data store 
    audioURL = audioFileName 

    // Setup audio session 

    let audioSession = AVAudioSession.sharedInstance() 
    do { 
     try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.DefaultToSpeaker) 
    } catch _ { 
     print("Error creating AVAudioSession") 
    } 

    let recordSettings = [AVFormatIDKey: NSNumber(unsignedInt: kAudioFormatMPEG4AAC), AVSampleRateKey: 44100.0, AVNumberOfChannelsKey: 2] 

    // Initiate and prepare recorder 

    audioRecorder = try?AVAudioRecorder(URL: audioFileURL!, settings: recordSettings) 
    audioRecorder?.delegate = self 
    audioRecorder?.meteringEnabled = true 
    audioRecorder?.prepareToRecord() 

は、どのような援助のためにありがとうございました!申し訳ありませんが、シム内のドキュメントディレクトリにあるファイルを追跡するのが少し難しいことがわかりました。 (私はSwift 2.3に入っています)

答えて

0

コアデータインスタンスを削除すると、ほとんどの場合、コアデータストアのものに影響します。コアデータは、保存した文字列がファイルを指していることを知らないため、文字列に特別な処理を行おうとしません。

NSFileManagerremoveItemAtURL:error:メソッドを使用してファイルを削除できます。これを行うには、管理対象オブジェクトのサブクラスであるprepareForDeletionをオーバーライドし、そこのファイルを削除するのがよいでしょう。

+0

ah fantastic thanksトム!私はprepareForDeletionに追加しようと考えています。きれいなアプローチのように聞こえると思っていたよりもはるかに簡単です(「音」エンティティは他のコアデータエンティティの子です)。 –

関連する問題