2016-09-09 6 views
0

Я новичок в Realm (Swift) и стараюсь использовать лучшую архитектуру.Как фильтровать данные по экрану

Предположим, у меня есть экран 1, где я загружаю объекты A, B и C, которые сохраняю в базе данных Realm и отображаются. Затем я перехожу на экран 2, где я загружаю объект того же типа, но загружаю другие объекты C, D и E. Если я вернусь к экрану 1, я не хочу найти себя с A, B, C, D и E. Я хочу найти A, B и C, как раньше, поэтому мне нужно отфильтровать.

Я подумал о двух стратегиях: Первым из них является сохранение на экране 1 массива uuids моего объекта и avec Результаты, на которых я запрашиваю объект, содержащий мою таблицу uuids, но это не работает, потому что мой массив uuids неактивен, поэтому мои изменения не будут вызваны тем фактом, что я добавляю или удаляю uuids из массива uuids.

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

ответ

0

Если вам нужно явно висеть на определенных объектах Realm в определенном контроллере просмотра, вы можете скопировать эти конкретные объекты из объекта Results в стандартный массив Swift, который не будет обновляться, если будут добавлены новые элементы.

Это решение довольно преходящее, хотя. Если вы хотите восстановить это представление с нуля с нуля, то фактическое сохранение этого состояния в Realm (и использование фильтра, как вы сказали), может быть лучшим вариантом.

Если это не поможет, вам может потребоваться предоставить информацию о том, что вы на самом деле пытаетесь сделать здесь (что представляют собой элементы A, B и C?), Чтобы мы могли лучше понять проблему вы пытаетесь решить здесь. :)

+0

Я сделал это за один раз, но объект, хранящийся в стандартном массиве Swift, не является хорошим решением, потому что предположим, что я удаляю объект, который находится на обоих экранах 1 и экране 2 на экране 2, если я вернусь для экрана 1 объект будет по-прежнему находиться в моем массиве и освобожден, так что он сработает, сказав, что объект уже недействителен. – Livio

+0

. Можно проверить статус объекта, проверив его свойство 'object.invalidated'. Когда вы возвращаетесь на этот экран, все, что вам нужно сделать, это проверить, что этот объект все еще действителен, и полностью отменить этот экран, если это не так. – TiM

+0

О, спасибо, я не знал! Это действительно потрясающе. Это означает, что вы можете в конечном итоге фильтровать массив с фильтром ({! $ 0.invalidated}) на viewWillAppear экрана A, чтобы он не разбился, когда вы вернетесь на этот экран! – Livio