删除Core Data实体时,是否删除了DocumentDirectory中的音频文件?

时间:2016-10-18 15:34:51

标签: swift core-data entity avfoundation

我用AVFoundation录制音频并将文件保存在DocumentDirectory中。然后在核心数据中,"声音" entity将url存储为字符串。一切都很好。但是我想知道:当从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()

非常感谢您的帮助!对不起,我发现在SIM卡中跟踪文档目录中的文件有点困难。 (我在Swift 2.3中)

1 个答案:

答案 0 :(得分:0)

删除核心数据实例最多会影响核心数据存储中的内容。 Core Data不知道您保存的字符串指向文件,因此它不会尝试对字符串执行任何特殊操作。

您可以使用removeItemAtURL:error:上的NSFileManager方法删除该文件。执行此操作的好地方是在托管对象子类中 - 覆盖prepareForDeletion并删除该文件。