CKComponent обновление без изменения модели

У меня есть какой-то канал с элементами истории, который может понравиться, как и Facebook.

Моим первым шагом было просто использование объекта модели истории, чтобы получить понравившийся статус и показать его в CKButtonComponent. Проблема с этим решением заключается в том, что кнопка недостаточно быстро представляет ожидаемый новый статус. Вместо этого я звоню в веб-службу, ответ на которую меняет историю, а затем кнопка меняется.

Чтобы быстрее изменить состояние кнопки, я создаю CKComponentController для этого CKComponent, который обновляет состояние компонента при нажатии кнопки:

- (void)toggleLike {
    [self.component updateState:^(id oldState){
        if ([oldState integerValue] == LikeComponentStateInitial || [oldState integerValue] == LikeComponentStateNotLiked) {
            return @(LikeComponentStateLiked);
        }
        return @(STGLikeComponentStateNotLiked);
    }];
    [WebService toggleLikeForStory:...];
}

Дополнительно я звоню через веб-сервис. Проблема с этим решением состоит в том, что когда я нажимаю кнопку "Мне нравится" несколько раз достаточно быстро, приложение вылетает с сообщением:

** Завершение приложения из-за необработанного исключения "NSInternalInconsistencyException", причина: "Необработанное действие компонента toggleLike после цепочки респондента ноль"

Авария происходит в Assert в void CKComponentActionSend(CKComponentAction action, CKComponent *sender, id context, CKComponentActionSendBehavior behavior) в классе CKComponentAction. Я не знаю, почему это происходит только тогда, когда я нажимаю кнопку достаточно быстро несколько раз. Кажется, что-то связано с перезагрузкой всех компонентов, которая происходит, когда новые данные истории сохраняются из ответа веб-службы. Перезагрузка всех компонентов и в то же время получение CKButtonComponent события касания, кажется, приводит к сбою.

CKComponentAction для CKButtonComponent - это описанный метод CKComponentController toggleLike,

Так что было бы хорошим решением в этом случае? Есть ли способ сделать это без изменения объекта модели истории?

У меня также есть ощущение, что мой подход к использованию состояния для переопределения некоторых данных модели (например, статуса), как правило, не очень хорошая идея.

0 ответов

Другие вопросы по тегам