覆盖Siesta中的本地数据?

时间:2018-10-13 21:14:05

标签: ios swift siesta-swift

我无法在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
}

但实际的.typedContentnil

1 个答案:

答案 0 :(得分:1)

overrideLocalDataoverrideLocalContent根本不与管道交互。 Siesta不会尝试解析您通过的内容;您覆盖的是资源的获取。

此外,overrideLocalDataoverrideLocalContent不会失败。他们总是更新资源的内容。如果调用这些方法,则资源内容将与您传递的内容匹配。

所以…问题没有得到解决。可能是什么?

Entity.typedContent是将as?应用于资源实体的content的快捷方式。如果得到nil,则意味着(1)传递给content的实体的overrideLocalData为nil或(2)您在其中调用{{1 }}与typedContent的实际运行时类型不匹配。

如果打印content,您会看到什么?这样可以向您显示实际位置,并排除resource.latestData.content的类型转换问题。

如果不为零,请从网络请求中比较其值,并获取匹配的类型。

如果为nil,则清除其他内容或首先传递nil内容。尝试typedContent,看看是否可以找到正确的位置。