Переопределить локальные данные в сиесте?
У меня проблемы с настройкой локальных данных для Siesta в Swift. Моя цель - установить 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
,
1 ответ
overrideLocalData
а также overrideLocalContent
не взаимодействовать с конвейером вообще. Сиеста не будет пытаться разобрать то, что вы передаете; то, что вы переопределяете, - это то, что получает ваш ресурс.
Более того, overrideLocalData
а также overrideLocalContent
не подведи Они всегда обновляют контент ресурса. Если вы вызываете эти методы, содержимое ресурса будет соответствовать тому, что вы передали.
Итак... проблема не в разборе. Что бы это могло быть?
Entity.typedContent
это ярлык для применения as?
для объекта ресурса content
, Если вы получаете ноль, это означает, что либо (1) content
сущности, которую вы передали overrideLocalData
был ноль или (2) контекстный тип, в котором вы звоните typedContent
не соответствует content
фактический тип времени выполнения.
Что вы видите, если вы печатаете resource.latestData.content
? Это покажет вам, что на самом деле там, и исключит проблемы преобразования типов с typedContent
,
Если это не ноль, сравните его значение из сетевого запроса и получите типы для соответствия.
Если это ноль, то либо что-то еще очистило контент, либо вы в первую очередь передали ноль контента. Пытаться SiestaLog.Category.enabled = .common
и посмотрите, сможете ли вы определить, где он находится, или нет, он настроен правильно.