Загрузить фото с библиотеки


#1

Здравствуйте. Подскажите пожалуйста, недавно начал проходить курсы, стараюсь писать все кодом. В Видео парень пользуется сторибордом. И вот дошел до того момента где у меня проблема которую не могу решить. Захожу в библиотеку с фото, выбираю фото и нажимаю добавить. После чего приложение падает. Как я понимаю, что он не понимает куда нужно добавить это фото. Помогите пожалуйста… Спасибо

.


#2

Могу предположить что photoView - не отрисован ( == nil )


#3

вообще он есть. Просто как я понял, в этом контроллере он не обозначен. Пока не пойму как это сделать


#4

покажите код где photoView добавлен на контроллер


#5

photoview это моя кастомная ячейка в которую хочу добавить выбраное фото из библиотеки

Я понимаю что не добавил в классе контроллера его вроде, и пока не разобрался как сделать (


#6


#7

Предположу что ImagePicker вызывается по тапу на ячейку, верно?


#8

да, вы абсолютно правы)


#9

У вас в контроллере совсем другой элемент photoView, нежели в ячейке, поэтому он у вас всегда nil.
Есть несколько вариантов решения проблемы
1 - при тапе на ячейку запоминать индекс ячейки, после обработки фото, получить ячейку с индексом и вставить картинку в элемент ячейки
2 - при тапе на ячейку сохранять указатель на элемент photoView ячейки, после обработки фото, вставлять картинку в сохраненный элемент


#10

первый вариант звучит понятнее ) а можно же не сохранять и не запоминать индекс ячейки? мы же знаем что это ячейка под индексом 0. И сразу присваивать фото ячейке 0 ?


#11

то есть можно же получить ссылку на кастомную ячейку и обратится к ней из другого класса ?


#12

Если у вас всего одна ячейка с фото, то наверное можно, но для подстраховки желательно сохранять, это позволит в будущем избежать крашей, если ячейка поменяет свою позицию, тогда не нужно будет править код.


#13

Прошу прощения, можно еще вопрос. Что бы обратится именно к той кастомной ячейке в контроллере, мне нужно создать обьект класса каст. ячейки(как на первом скрине), и создав переменную через инит передать параметры (скрин 2) ? Просто я понимаю что это очень простой вопрос, и почему то ни где не могу нагуглить ответ =)


#14


#15

Так тоже не раб) На видео он с сториборда тянет ячейку в контроллер. А как кодом сделать не понятно


#16

Примерно как-то так
В контроллере

var photoView: UIImageView?

func viewDidLoad() {
    ...
    if let cell = tableView.cellForRow(at: IndexPath) as? Cell_createPlace {
        photoView = cell.photoView
    }
}

Это если у вас данная ячейка всегда в одной позиции.
В принципе, это же можно вставить в didSelectRowAt, там тогда IndexPath будет подставляться нужный.


#17

Аллилуя! Спасибо большое) работает!