外部存储核心数据

时间:2017-08-08 07:06:03

标签: ios swift xcode memory core-data

我正在建立能够录制视频,音频和图像的app。每个媒体都与CoreData实体一起存储,其二进制数据属性与外部存储(Core Data实体中的二进制数据选项)一起存储。例如,一条记录可以包含以下关系的许多视频:

enter image description here enter image description here

到目前为止,一切运行良好,但在一些性能测试中,我发现应用程序没有正确释放CoreData对象,或者至少可以预测(对我来说)。

第一个问题是当我从上下文删除对象并保存它时,它仍然保留在持久内存中,因为我可以使用自己的谓词提取找到它。但是,例如TableView的默认提取(在创建新项目时生成的代码)会忽略已删除的对象。我删除记录对象,例如从表视图这样:

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        let context = fetchedResultsController.managedObjectContext
        let object:Record = fetchedResultsController.object(at: indexPath) as! Record
        context.delete(object)    
        do {
            try context.save()
            print("saved")
        } catch {   
            let nserror = error as NSError
            fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
        }
    }
}

下一期是我不确定此时是否执行了级联删除...

这指向第三个也是最后一个问题 - 二进制数据文件保留在应用程序内存中(通过Xcode下载App Container进行检查)。这个主要问题导致应用程序无法控制地“扩展”。

我相信外部存储空间会自动解决此问题。即使我手动nil保存二进制数据的变量,真实文件仍然保留在持久内存中。

所以问题可能听起来像这样:

1。当Core Data从持久性内存中永久释放对象时?

2。何时从持久性内存中删除外部二进制数据?

感谢各位的帮助!

更新#1:

因此,根据Core Data Programming Guide,对托管对象有强烈的引用。章节打破对象之间的强引用描述得很好。不幸的是,没有任何建议帮助我解决上述问题。

更新#2:

解决了文件的问题,这是我的代码中的一个错误,因为我忘了清除临时文件夹和目的地......

学家

0 个答案:

没有答案
相关问题