我无法在Swift中成功为Siesta设置本地数据。我的目标是为本地UIImage
设置一个URL
,以便可以在没有下载时间的情况下显示此本地图像。
为此,我将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
。
答案 0 :(得分:1)
overrideLocalData
和overrideLocalContent
根本不与管道交互。 Siesta不会尝试解析您通过的内容;您覆盖的是资源的获取。
此外,overrideLocalData
和overrideLocalContent
不会失败。他们总是更新资源的内容。如果调用这些方法,则资源内容将与您传递的内容匹配。
所以…问题没有得到解决。可能是什么?
Entity.typedContent
是将as?
应用于资源实体的content
的快捷方式。如果得到nil,则意味着(1)传递给content
的实体的overrideLocalData
为nil或(2)您在其中调用{{1 }}与typedContent
的实际运行时类型不匹配。
如果打印content
,您会看到什么?这样可以向您显示实际位置,并排除resource.latestData.content
的类型转换问题。
如果不为零,请从网络请求中比较其值,并获取匹配的类型。
如果为nil,则清除其他内容或首先传递nil内容。尝试typedContent
,看看是否可以找到正确的位置。