URLSessionDownloadTask
当应用程序处于关闭状态或我的下载状态发生更改时,我想保存核心数据,例如从等待状态变为下载状态或完成状态。
我的自定义类的所有其他属性都存储得很好,但是应用程序在存储下载任务时会崩溃。
崩溃的原因是
[__NSCFLocalDownloadTask encodeWithCoder:]:无法识别的选择器发送到实例 0x7ff189f181c0 -[NSKeyedArchiver dealloc]:警告:NSKeyedArchiver 在没有调用 -finishEncoding 的情况下被释放。由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFLocalDownloadTask encodeWithCoder:]:无法识别的选择器发送到实例 0x7ff189f181c0”
这是我的课
class VideoDownloadModel : NSManagedObject {
@NSManaged var videoID : NSNumber?
@NSManaged var vid : Video?
@NSManaged var downloadTask : URLSessionDownloadTask?
@NSManaged var downloadStatus : String?
}
像这样存储它
let request = NSFetchRequest<NSFetchRequestResult>(entityName: (COREDATA_ENTITY_Description?.name)!)
request.returnsObjectsAsFaults = false
request.predicate = NSPredicate(format: "videoID == %@", videoModel.videoID!)
do {
let result = try COREDATA_CONTEXT.fetch(request)
print(result)
var vidArr = result as! [VideoDownloadModel]
if vidArr.count != 0 {
vidArr[0] = videoModel
COREDATA_MANAGER.saveContext()
}
} catch {
let fetchError = error as NSError
print(fetchError)
}
什么时候URLSessionDownlaodTask
可以nil
正常工作,但是当任何下载开始时,它会在保存时崩溃。
场景:
我用所有属性初始化了我的自定义类对象,但将任务设置为 nil。
我将该对象存储在它完美保存的核心数据中。
我初始化该对象的任务,下载工作完美。
然后我更新核心数据中的对象,同时更新应用程序崩溃了,因为 URLSssionTask 没有从 NSCoding 继承。所以它没有编码和解码方法。
我想要一些解决方案来解决这个问题
任何帮助将不胜感激。谢谢。