在 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

但实际的.typedContentnil

【问题讨论】:

【参考方案1】:

overrideLocalDataoverrideLocalContent 根本不与管道交互。 Siesta 不会尝试解析您传递的内容;你覆盖的就是你的资源得到的。

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

所以……问题不在于解析。可能是什么?

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

如果您打印resource.latestData.content,您会看到什么?这将向您展示实际存在的内容,并排除 typedContent 的类型转换问题。

如果不是 nil,则从网络请求中比较其值并获取要匹配的类型。

如果它是 nil,那么要么是其他东西清除了内容,要么你首先传递了 nil 内容。试试SiestaLog.Category.enabled = .common,看看你是否能发现它在哪里设置正确。

【讨论】:

以上是关于在 Siesta 中覆盖本地数据?的主要内容,如果未能解决你的问题,请参考以下文章

Vue Apollo Query 不覆盖本地数据

Angular 6 代码覆盖率...如何在应用程序的代码覆盖率中排除本地库?

svn,在更新时,如何实现覆盖原有的文件,而不是在文件中多了几道杠,和很多重复代码

EXTJS 本地化(覆盖类)

Django:从本地开发推送时,SQLite 在 Heroku 上覆盖 POSTGRESQL db

修饰符“覆盖”不适用于“本地功能”