Похоже, вы пытаетесь сохранить ваши данные в tableViewController. Это большая ошибка. Ваши контроллеры представления должны хранить только временные данные, необходимые для немедленной работы интерфейса.
Вместо этого вам нужно создать модель данных, которая будет содержать данные всех ваших приложений. Это может быть что-то такое же простое, как пользовательский класс с массивом внутри, или такое же сложное, как большой граф базовых данных. Независимо от сложности, ключевая концепция заключается в том, что все данные записываются по два, логически обрабатываются внутри и считываются из модели данных. Никакая другая часть приложения напрямую не манипулирует данными. При такой конструкции контроллеры представления не должны быть осведомлены друг о друге. Они просто спрашивают модель данных, какую информацию им нужно отобразить.
Ключевой особенностью модели данных является то, что она не знает, как данные получены или как они отображаются или отправляются. Хорошо сконструированная модель данных будет одинаково хорошо работать с графическим интерфейсом, командной строкой или любым другим интерфейсом человека или компьютера.
В вашем случае вам нужно начать с игнорирования того, как будут отображаться данные, и вместо этого спросить, каковы логические отношения внутри данных, которые нужно отображать в двух разных таблицах.
Например, предположим, что ваши данные - это простой список имен. Пользователь должен создать подмножество этого списка и затем выполнить некоторую операцию над подмножеством. Вы должны написать свою модель данных для хранения и вернуть список имен. Тогда у вас есть свойство для подсписка. Затем в модели будет определен метод, который будет передавать выбранные имена из списка в подсписок.
В вашем пользовательском интерфейсе у вас будет одна таблица, контроллер которой будет загружать список в таблицу и записывать, какие строки выбрал пользователь. Затем контроллер вызывает метод модели данных, который перемещает имена в подсписок. Единственное, что знает контроллер, это как запросить список и как сообщить модели данных, какие имена были выбраны. Он понятия не имеет, как будут использоваться данные.
Второй контроллер знает только о свойстве подсписка модели данных и о том, как сообщить модели данных, какое имя в подсписке выбрал пользователь. Когда он открывает свой табличный вид, он заполняет таблицу именами в подсписке, но знает, что сделал другой вид.
Если у вас есть подробный вид, то шаблон повторяется. Модель данных записывает, какое имя было выбрано любым интерфейсом. Контроллер подробного представления знает только, как запросить модель данных для выбранного имени и любые данные, связанные с этим.
Эта конструкция делает каждый контроллер представления независимым от всех остальных. Контроллерам представления даже не нужно знать, что другие существуют, кроме как для навигации.
Эта конструкция делает приложение модульным, простым в обслуживании и расширении. Ваши данные всегда находятся в одном месте и имеют один объект, предназначенный для их защиты и манипулирования ими. Если что-то идет не так с данными, вы точно знаете, где искать.