1

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

спасибо.

ответ

0

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

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

+0

Это не очень хорошая идея, поскольку одна из идей, стоящих за VIPER, - это чтобы отделить реализацию сохранения данных от остальной части приложения. Если теперь вы начнете обходить NSManagedObjects, весь ваш код зависит от CoreData, и вы получите проблемы, упомянутые @Arkadi, тоже – ShadowLightz

+0

Только это @Arkadi ошибочно. Core Data ** является потокобезопасным, и поскольку он является стандартом _de facto_ для сохранения на iOS, мои предлагаемые решения не предотвращают разделение проблем при использовании API Apple для простоты и производительности. – Mundi

+0

Я недавно использовал CoreData довольно сильно, и я могу гарантировать, что CoreData все еще спорадически сбой при использовании в неправильном потоке; со спорадически я имею в виду, что аварии происходят в порядке 1 из миллиона операций, но они происходят. Следовательно, вам нужно обернуть каждую операцию в синхронизированные блоки выполнения. Кроме того, несмотря на то, что CoreData отличная, возможно, потребуется другое решение db; особенно когда требуется синхронизация с Android или Windows. – ShadowLightz

0

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

Смежные вопросы