Обновите NSManagedObject в приложении с архитектурой VIPER.

В приложении, использующем архитектуру VIPER, рекомендуется работать с сущностями с помощью NSObject вместо NSManagedObject (Interactor). Таким образом, NSManagedObject «преобразовывается» в PONSO для работы. Вопрос в том, если я изменю атрибуты в PONSO, как мне обновить основные данные?

Спасибо.


person RFG    schedule 14.04.2016    source источник


Ответы (2)


Просто используйте NSManagedObject вместо NSObject. Эту рекомендацию не следует понимать буквально. В любом случае, NSManagedObject является прямым потомком NSObject, так что для всех практических целей он ничуть не хуже.

Кстати, VIPER — это общая философия архитектуры, которая не получила большого распространения из-за чрезмерной детализации своих файлов и функций. Я бы порекомендовал вам уменьшить проблему "Massive View Controller", структурировав свой код более функционально вокруг этих контроллеров, используя VIPER в качестве хорошего источника вдохновения.

person Mundi    schedule 16.04.2016
comment
Это не очень хорошая идея, так как одна из идей VIPER состоит в том, чтобы отделить реализацию сохраняемости данных от остальной части приложения. Если вы сейчас начнете передавать NSManagedObjects, весь ваш код зависит от CoreData, и вы также получите проблемы, упомянутые @Arkadi. - person ShadowLightz; 10.02.2018
comment
Только вот @Arkadi ошибается. Core Data является потокобезопасным и, поскольку он де-факто является стандартом сохранения на iOS, предлагаемые мной решения не препятствуют разделению ответственности при использовании API Apple для простоты и производительности. . - person Mundi; 11.02.2018
comment
Недавно я довольно интенсивно использовал CoreData и могу гарантировать, что CoreData все еще время от времени дает сбой при использовании не в том потоке; спорадически я имею в виду, что сбои происходят в порядке 1 на миллион операций, но они случаются. Следовательно, вам нужно обернуть каждую операцию в синхронизированные блоки выполнения. Кроме того, несмотря на то, что CoreData великолепен, может подойти другое решение для БД; особенно когда требуется синхронизация с Android или Windows. - person ShadowLightz; 14.02.2018

Это очень плохая идея. Если вы используете какие-либо элементы асинхронного кода в своем приложении, как и большинство из нас, вы должны знать, что nsmanagedoject не является потокобезопасным для передачи. Вам нужно пересмотреть свой подход. Если вы используете приложение с поддержкой основных данных, вы можете сохранить управляемый объект в понсо и использовать его для обновления базы данных при запуске обновления пользовательского интерфейса после изменения базы данных.

person Arkadi    schedule 09.11.2017