Основные данные Скалярная ошибка только на некоторых устройствах

В основном я тестировал iPhone 6, 6 и iPad. Просто попробовал свое приложение сегодня на симуляторе iPhone 5 и получил ошибку Core Data.

CoreData: error: свойство 'setId:' является скалярным типом в классе "AppName.EntityName", который не соответствует его скалярному типу свойств Entity. Динамически сгенерированные аксессоры не поддерживают неявное принуждение типа. Невозможно создать для него метод настройки

Теперь в моем приложении нет объекта "setId", но, конечно, объект имеет объект "ID", который устанавливается как int.

class Entity: NSManagedObject {
    @NSManaged var id: Int
}

В модели Core Data тип атрибута установлен в Integer64. Это может быть моей проблемой, поскольку я выбрал это, не зная, что лучше. У меня есть другие атрибуты в модели и классе, но все они являются строками.

Ищем как исправление, так и объяснение, почему это происходит только на некоторых устройствах, поэтому я могу узнать!

Ответы

Ответ 1

Если тип Core Data является Integer 64, вы должны объявить свойство как Int64 (или позволить Xcode создать подкласс управляемого объекта).

Int может быть 32 бит или 64 бит, в зависимости от архитектуры процессора.

В качестве альтернативы, определите свойство как NSNumber* вместо скалярного свойства. Конечно, вы должны позаботиться о том, чтобы на 32-битной платформе значения не превышали диапазон Int.

Ответ 2

В качестве альтернативы вы можете написать собственный метод setter/getter, который преобразует Int в экземпляр NSNumber и передает это значение в примитивном значении. Например:.

private(set) var publicId: Int {
  get {
    self.willAccessValueForKey("publicId")
    let value = self.primitivePublicId.longValue
    self.didAccessValueForKey("publicId")
    return value
  }
  set {
    self.willChangeValueForKey("publicId")
    self.primitivePublicId = NSNumber(long: newValue)
    self.didChangeValueForKey("publicId")
  }
}
@NSManaged private      var primitivePublicId: NSNumber