(Вопрос был переписан после обсуждения с @AndreasOetjen ниже. Спасибо за его комментарии.)
Я столкнулся с проблемой при использовании UITableView
с расширяемым источником данных. В моем приложении, когда пользователь изменяет элемент, он может изменить другой элемент, который отображается в том же табличном представлении. Проблема в том, что после того, как я создал и применил новый моментальный снимок, содержащий новые значения обоих элементов, пользовательский интерфейс косвенно измененного элемента не был обновлен.
Сначала я подумал, что источник данных, способный к диффузии, может обнаружить значение элемента изменить в другом снимке. Например, это может работать следующим образом: если он обнаружил, что оба снимка содержат один и тот же элемент (то есть элементы в обоих снимках имеют одинаковое значение ha sh), он сравнил их значения и обновил строку этого элемента в табличном представлении, если значение изменилось , Однако позже я понял, что, возможно, это не сработало, потому что в источнике данных, который можно распространить, не определено никакого API для получения и сравнения значения элемента (моя первоначальная мысль заключалась в том, что он использовал description
вычисляемое свойство и ==
операцию, но теперь я верю, что это не так).
Так что мое текущее понимание - это источник данных, который использует ха sh элемента для обнаружения изменения порядка элементов (т. е. новый элемент вставлен, старый элемент все еще существует, et c.), вместо изменение значения элемента (т. е. старый элемент все еще существовал, но его значение изменилось). Если это понимание верно, то возникает вопрос: как использовать источник данных с возможностью преобразования для реализации следующего сценария?
- Элемент имеет несколько свойств. Одно свойство (назовем его свойством A) отображается в пользовательском интерфейсе, но не используется для генерации ha sh.
- Элемент существует как в старых, так и в новых снимках, но его свойство A изменяется. Поэтому его пользовательский интерфейс необходимо обновить.
В старом UITableView
API это можно реализовать, вызвав reloadRows()
или reloadData()
. Но как это сделать, используя диффузный источник данных?
ОБНОВЛЕНИЕ :
Потратив время на эксперименты и решение проблемы, я полагаю, что понимание в приведенном выше вопросе было неверным. Пожалуйста, смотрите мой ответ ниже. Я считаю, что это объясняет, как работает источник данных. Я надеюсь, что это поможет другим, у кого будет такая же путаница. Я был бы рад оказаться неправым. В самом деле. Поэтому, пожалуйста, оставьте свой ответ, если вы думаете по-другому.