Получение нулевых значений при `отображении` массива сущностей - PullRequest
0 голосов
/ 20 сентября 2019

Я использую Core Data в приложении для iOS и выполняю следующий код Swift, который приводит к ошибке во второй строке:

let movies = (try? container.newBackgroundContext().fetch(request)) ?? []
return movies.map { $0.name! } // error: unexpectedly found nil while unwrapping...

Обратите внимание, что в приведенном выше примере это на 100% уверено, чтоне является сущностью в movies с nil в name.Соответствующий атрибут в модели базовых данных установлен на не обязательно .

Когда я изменяю код, как показано ниже (то есть не вставляя newBackgroundContext()), ошибки нет:

let context = container.newBackgroundContext()
let movies = (try? context.fetch(request)) ?? []
return movies.map { $0.name! } // no error this time

Я довольно новичок в Swift и предполагаю, что он как-то связан с управлением памятью (например, context определен преждевременно), но я был бы признателен за фактическое объяснение того, почему ошибка возникает в первом листинге кода.

1 Ответ

0 голосов
/ 20 сентября 2019

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

movies.compactMap { $0.name }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...