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
,
Так что было бы хорошим решением в этом случае? Есть ли способ сделать это без изменения объекта модели истории?
У меня также есть ощущение, что мой подход к использованию состояния для переопределения некоторых данных модели (например, статуса), как правило, не очень хорошая идея.