Помогите с передачей переменной и segue


#1


Есть класс HomeModel, в нём есть массив locations. В класс ViewController нужно передать этот массив.

Потом я хочу передать через segue передать строку из locations в нажатой ячейке передать в класс ShowInfoViewController и там вывести в label


#2

Так у вас локейшонс определен внутри функции, поэтому вы не видите его из другого класса. Определите локейшонс вне функции. А локейшонс, который определяется внутри функции “парсДжейсон” - удалите.


#3

вынес locations из функции, ошибки остались


#4

public var locations: NSMutableArray? - попробуйте так. И нажмите на контрл бэ, ошибки могут не сразу уйти.


#5

Замените
let locations = HomeModel.locations
на
let locations = homeModel.locations
.

Если я правильно понимаю, то locations в классе у вас инициализирован пустым массивом, при том, что это константа.


#6

вынес из функции и поменял, как вы сказали. Появилась новая ошибка


#7

А что за Room! вообще? Я его на ваших скринах не вижу. Где он у вас определен.


#8


#9

Вы этот Рум обьявили вне класса) Поместите его в класс


#10

не помогает
37


#11

Конечно не поможет, ибо у вас как-то архитектурно не так построено приложение) Вам бы переделать всю эту логику. А чего вы вообще добиваетесь этим кодом? Ну и переменные с маленькой буквы пишут)


#12

в HomeModel из базы данных загружаются данные. Это выводится в TableView, при нажатии на TableView происходит переход на ShowInfoViewController, где в label должно вывести содержимое переменной Room


#13

То есть в локейшонс у вас сохраняется некий объект, да? Так сделайте так, чтобы у этого объекта был свой класс, а в нем строковая переменная. В нужный вам контроллер вы передадите объект, а не строку. И в нужном вам классе вы из этого объекта просто вытащите строку из переданного объекта и инициализируете таким образом лейбл. Всё)


#14

У него уже есть свой класс для этого объекта, названный LocationModel. Так что пока это зашло не слишком далеко, замените в строке, где у вас ошибка
Room
на
room.

is_busy у вас, насколько я помню, лэйбл (правильно?) так что нужно обращаться к его свойству text (с маленькой буквы :wink: )

Кстати, в tableView у вас всё нормально отображается?

PS Ещё у вас неправильно определяется тип locations в классе ViewController. Вы же не убрали locations = homeModel.locations ? Ещё у вас есть массив feedItems, которым вы заполняете таблицу, можете использовать его для передачи данных.


#15

да, с tableView всё ок


#16

Из того, что я понял - я бы сделал так:
var locations: [Location] = [ ]
//инициализировали объект локейшонс как вам надо…
locations.add(location)

//и в препейр где is_busy класса ШоуИнфоВьюКонтроллер - это объекта класса Location
dvc.is_busy = self.locations[indexPath.row]


#17

Судя по коду ничего менять не нужно. Там есть метод из делегата itemsDownloaded, который возвращает как раз locations и записывает в переменную feedItems. Вот этот feedItems и передавайте во 2й VC.

P.S. и для начала изучили бы основы, прежде чем работать с чужим кодом.