Приложение My Swift 3 использует CoreData. Поскольку переход на Swift3/Xcode 8, я отказался от автоматической генерации кода для подклассов NSManagedObject
(Новое поведение, я до сих пор еще не совсем понял), поэтому я просто указываю non/manual и создаю свои собственные классы. Все идет нормально.Управляемое свойство типа NSNumber? не инициализирован до нуля
Я храню все мои скаляры атрибуты NSNumber?
свойств, а не дополнительные скалярные типы, как Int?
, Double?
и т.д. (я не уверен, что, если дополнительные скалярные свойства хорошо работать с Core Data ...?).
Проблема заключается в том, что я не могу обнаружить состояние «Значение не все равно» атрибутов в моих только что созданных объектах.
К примеру, у меня есть:
class MyClass: NSManagedObject {
// Stores a double
@NSManaged var length: NSNumber?
}
Всякий раз, когда я пытаюсь получить доступ к значению, я никогда не nil
, но 0.0
вместо:
if let value = myObject.length?.doubleValue {
// Always gets executes and value 0.0 is unwrapped
// for new objects
} else {
// Never gets executed
}
Однако, если я вручную установить его к нолю при вставке экземпляра, то есть:
override awakeFromInsert(){
super.awakeFromInsert()
// Explicitly set to nil:
self.length = nil
}
... тогда я получаю ожидаемое поведение.
Я что-то пропустил?
Я предполагаю, что атрибут @NSManaged
делает его по-разному отличным от необязательного свойства run-of-the-mill swift. Но я не могу найти упоминания об этом поведении в любом месте.
является собственностью nullable? – Sulthan
Вы указали * значение по умолчанию * для свойства в контролере модели Core Data? –
О, да. Несмотря на то, что я вручную генерирую код с использованием NSNumber, установлен флажок «Использовать тип Scalar», а значение по умолчанию равно нулю! : 0 –