Ответ 1
Обновление для Xcode 7: Эта проблема была решена с помощью Xcode 7 beta 2. Дополнительные свойства Core Data теперь определяются как дополнительные свойства в подклассах управляемых объектов, сгенерированных Xcode. Это уже не необходимые для редактирования сгенерированного определения класса.
(Предыдущий ответ:)
При создании подклассов NSManagedObject
Xcode не определяет дополнительные свойства для тех атрибутов, которые помечены как "необязательные" в инспекторе модели Core Data.
Это похоже на ошибку.
В качестве обходного пути вы можете передать свойство
необязательный (as String?
в вашем случае), а затем проверить его с необязательной привязкой
if let notice = someManagedObject.noticeText as String? {
println(notice)
} else {
// property not set
}
В вашем случае это будет
if let notice = formQuestions[indexPath.row].noticeText as String? {
println(notice)
} else {
// property not set
}
Обновление: Как и в Xcode 6.2, это решение больше не работает и сбой при выполнении исключения EXC_BAD_ACCESS (сравните Swift: обнаружение неожиданного значения nil в необязательном во время выполнения: литье в качестве необязательного сбоя)
Решение "Старый ответ" ниже работает.
(Старый ответ:)
Как уже отмечалось в Daij-Djan в комментарии, вы должны определить свойство для необязательный атрибут Core Data как необязательный или неявно развернутый необязательный:
@NSManaged var noticeText: String? // optional
@NSManaged var noticeText: String! // implicitly unwrapped optional
К сожалению, Xcode неправильно определяет дополнительные свойства при создании подклассы NSManagedObject, что означает, что вам необходимо повторно применить изменения если вы создадите подклассы снова после изменения модели.
Также это, похоже, все еще недокументировано, но оба варианта работали в моем тестовом случае.
Вы можете проверить свойство с помощью == nil
:
if formQuestions[indexPath.row].noticeText == nil {
// property not set
}
или с дополнительным назначением:
if let notice = formQuestions[indexPath.row].noticeText {
println(notice)
} else {
// property not set
}