在 Siesta 中覆盖本地数据?
Posted
技术标签:
【中文标题】在 Siesta 中覆盖本地数据?【英文标题】:Override Local Data in Siesta? 【发布时间】:2018-10-13 21:14:04 【问题描述】:我无法在 Swift 中成功设置 Siesta 的本地数据。我的目标是在本地为URL
设置一个UIImage
,这样就可以在没有下载时间的情况下显示这个本地图像。
为此,我将 URL 的图像数据设置为:
let resource = CustomRemoteImageView.imageCache.resource(myPhoto.url.absoluteString)
let imageData = UIImagePNGRepresentation(image)! // I've also tried putting the UIImage directly in there, because the transformation chain doesn't apply to local data, right?
let entity: Entity<Any> = Entity(content: imageData, contentType: "*/*") // I've played around with the content type too!
resource.overrideLocalData(with: entity)
然后我使用了一个自定义服务,它总是尝试将内容解析为图像:
private let imageTransformer =
ResponseContentTransformer
Image(data: $0.content)
convenience init()
self.init(standardTransformers: [])
configure
$0.pipeline[PipelineStageKey.parsing].add(self.imageTransformer, contentTypes: ["*/*"])
这个系统对所有远程图像都很好,但它似乎总是无法解析这个被覆盖的本地图像。似乎它正在尝试解析,但每次都失败。
即我收到了Siesta.ResourceEvent
的
(Siesta.ResourceEvent) $R20 = newData
newData = network
但实际的.typedContent
是nil
。
【问题讨论】:
【参考方案1】:overrideLocalData
和 overrideLocalContent
根本不与管道交互。 Siesta 不会尝试解析您传递的内容;你覆盖的就是你的资源得到的。
此外,overrideLocalData
和 overrideLocalContent
不会失败。他们总是更新资源的内容。如果您调用这些方法,资源内容将与您传递的内容相匹配。
所以……问题不在于解析。可能是什么?
Entity.typedContent
是将as?
应用于资源实体的content
的快捷方式。如果您得到 nil,则意味着 (1) 您传递给 overrideLocalData
的实体的 content
为 nil 或 (2) 您调用 typedContent
的上下文类型不匹配content
的实际运行时类型。
如果您打印resource.latestData.content
,您会看到什么?这将向您展示实际存在的内容,并排除 typedContent
的类型转换问题。
如果不是 nil,则从网络请求中比较其值并获取要匹配的类型。
如果它是 nil,那么要么是其他东西清除了内容,要么你首先传递了 nil 内容。试试SiestaLog.Category.enabled = .common
,看看你是否能发现它在哪里设置正确。
【讨论】:
以上是关于在 Siesta 中覆盖本地数据?的主要内容,如果未能解决你的问题,请参考以下文章
Angular 6 代码覆盖率...如何在应用程序的代码覆盖率中排除本地库?
svn,在更新时,如何实现覆盖原有的文件,而不是在文件中多了几道杠,和很多重复代码