Переопределить локальные данные в сиесте? - PullRequest
0 голосов
/ 14 октября 2018

У меня проблемы с настройкой локальных данных для 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
}

, но фактический .typedContentnil.

1 Ответ

0 голосов
/ 14 октября 2018

overrideLocalData и overrideLocalContent вообще не взаимодействуют с конвейером.Сиеста не будет пытаться разобрать то, что вы передаете;то, что вы переопределяете, - это то, что получает ваш ресурс.

Кроме того, overrideLocalData и overrideLocalContent не терпят неудачу.Они всегда обновляют содержимое ресурса.Если вы вызываете эти методы, содержимое ресурса будет соответствовать тому, что вы передали.

Итак ... проблема не в разборе.Что бы это могло быть?

Entity.typedContent - это ярлык для применения as? к сущности ресурса content.Если вы получаете ноль, это означает, что либо (1) content сущности, которую вы передали overrideLocalData, было ноль, либо (2) контекстный тип, в котором вы вызываете typedContent, не совпадаетфактический тип времени выполнения content.

Что вы увидите, если напечатаете resource.latestData.content?Это покажет вам, что там на самом деле, и исключит проблемы с преобразованием типов: typedContent.

Если это не ноль, сравните его значение из сетевого запроса и получите типы для соответствия.

Если это ноль, то либо что-то еще очистило контент, либо вы в первую очередь передали ноль контента.Попробуйте SiestaLog.Category.enabled = .common и посмотрите, сможете ли вы определить, где он находится, или не настроен на нужную вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...