【发布时间】:2017-06-02 10:35:31
【问题描述】:
当应用程序处于关闭状态或我的下载状态发生更改(例如从等待状态变为下载状态或完成状态)时,我想将 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 继承的。所以它没有编码和解码方法。
我想要一些解决方案来解决这个问题
任何帮助将不胜感激。谢谢。
【问题讨论】:
-
请展示如何你是如何做到的(代码)。
-
我已将其添加到我的帖子中,请查看它。
-
我强烈怀疑您是否会在从 Core Data 获取任务后恢复它。
-
Vadian no 任务未恢复。让我分享 1 个完整的场景: 1- 我用所有属性初始化了我的自定义类对象,但将任务设置为 nil。 2-我将该对象存储在它完美保存的核心数据中。 3-我初始化该对象的任务,下载工作完美。 4-然后我更新核心数据中的对象,同时更新应用程序崩溃了,因为 URLSssionTask 不是从 NSCoding 继承的。所以它没有编码和解码方法。现在我想要一些解决方案来解决这个问题。
标签: ios swift core-data nsurlsessiondownloadtask urlsessiontask