На этот вопрос действительно есть два ответа. Первый более философский: в большинстве случаев вы хотите, чтобы обновления модели происходили мгновенно. По большей части пользователям не нужно беспокоиться о сохранении, фиксации и т. Д. Изменениях марки. Повсеместная интеграция Binding с NSUndoManager
означает, что все, что пользователь делает, может быть отменено (или должно быть отменено). Все действия пользователя должны быть «с низким риском», так что внесение изменений и последующая отмена не наносят ненужного «вреда» данным пользователя или состоянию приложения. Если вы используете базовые данные для слоя модели, вы всегда можете откатить или сохранить набор изменений программным способом, используя методы NSManagedObjectContext
. Если нет действительно веской причины, по которой пользователю нужна кнопка «Отправить», не вставляйте ее. В соответствии с этой философией используется функция «Отменить отправку» в Gmail. Даже отправка электронной почты должна быть отменена (в пределах разумного).
Второй ответ более практичен. Конечно, есть ситуации, когда вы имеете дело с бэкэнд-системой, которая не так проста, как какао. В этом случае лучшим вариантом является создание временного объекта модели, который служит моделью для пользовательского интерфейса (представьте модель представления в архитектуре Model-View-View-Model (MVVM)). Когда пользователь отправляет изменения, вы можете скопировать временный объект модели в постоянную модель. В Core Data вы можете использовать постоянное хранилище в памяти, поддерживающее отдельный контекст управляемого объекта, для хранения этих временных экземпляров, а затем объединять изменения из этого временного контекста в ваш основной контекст при отправке.