ВьюМодель ни чего не умеет, кроме как отдавать значения из своих пропертей. А значит - в нее не нужно никогда ничего передавать. Это как чек в магазине. В кассовом аппарате данные хранятся в каком-то виде, но вам, они выдаются в том виде в котором вам удобно их воспринять. В чек вы ничего не можете больше впихнуть. Надо только печатать новый.
Если я правильно понимаю, то по нажатию на "Назад" должна измениться Модель, согласно данным введенных пользователем, и она же должна передаться в другой вьюконтроллер. Который, сделает из Модели ту ВьюМодель что ему нужно, и покажет ее.
Ну "унаследованные от NSManagedObject" так унаследованные от NSManagedObject. Ладно.
А про "вариант с передачей модели я слышу впервые" это вы что-то батенька загнули(!!!). Модель для того и создается чтобы ее везде передавали. она инкапсулирует в себе весть набор необходимых ей данных в том виде в котором вам как разработчику это удобно. А вот показывать эти данные в том же виде в котором они содержаться в Модели - не всегда удобно. Поэтому и существует ВьюМодель.
У вас в Модели может храниться время, но на разных экранах вам надо показывать его в разном формате - значит для разных экранов это будут разные ВьюМодели.
А зачем вы работаете с intrinsicContentSize? Почему не с bounds? Вы пробовали и это не работает?
(upd) Перечитал доку. Да, понятно почему работаете с 'intrinsicContentSize'. Попробуйте вместо invalidateIntrinsicContentSize использовать sizeToFit(); layoutIfNeeded()
Я так понимаю self.walk.proportion = walk и есть код который выставляет новую ширину полоски? Тогда надо, как и указал doublench21 , надо после установки новой пропорции перерисовывать полоску. В вашем коде этого нет.
Попробуйте перерисовывать таблицу после поворота экрана.
ИМХО, понимать асинхронные операции это правильно, вот только вы выбрали сложный случай, потому что у вас тут два асинхронных сценария:
- показ UI
- подгрузка по сети
Для такого народ использует уже написанные либы, типа Kingfish, потому что самому писать конечно круто, но долго и ноги себе все переломаешь.
Советую выбрать что-то одно: подгрузку и вывод в консоль.
В логике кода - ошибки нет. Но, в архитектурной логике - есть. Однозначного ответа для архитектурной реализации - нет. Можно так:
- написать протокол CellDelegateProtocol в котором будет метод cellTextDidChanged()
- написать ячейке пропертю var delegate: CellDelegateProtocol?
- подписать на CellDelegateProtocol датасорс таблицы
- в методе cellForRow устанавливать ячейке делагата (естественно это будет датасорс)
- в датасорсе реализовать метод cellTextDidChanged() в котором уже будет ваш код с beginUpdates итп.
Кода больше, вроде бы запутанней. но это только для начинающих. Позже, вы только так и будете думать, потому что - child-ы ни когда не должны указывать своим parent-ам что делать. Для собственного роста обмозгуйте концепцию SOLID.
Если я правильно понимаю, то по нажатию на "Назад" должна измениться Модель, согласно данным введенных пользователем, и она же должна передаться в другой вьюконтроллер. Который, сделает из Модели ту ВьюМодель что ему нужно, и покажет ее.