Подтвердить что ты не робот

Swift + CoreData: не может автоматически устанавливать дополнительный атрибут на сгенерированном подклассе NSManagedObject

У меня есть объект coredata с именем Record и имеет свойство dateUpdated. Я заметил, что сгенерированный подкласс NSManagedObject не имеет необязательной метки (?)

Редактор CoreData:

enter image description here

Сгенерированный подкласс:

enter image description here

Ожидаемое:

enter image description here

ОБНОВЛЕНО: Он утомительный в моей части, потому что каждый раз, когда я хочу регенерировать подклассы, это означает, что мне также необходимо обновить все необязательные значения вручную. Наличие необязательного (без??) В подклассе заставляет меня проверять значение перед назначением, например, пример ниже:

// sample value:
// serverDateFormatter = "yyyy/MM/dd"
// dateString = ""    

// Branch is a subclass of Record (see above images)

var date = self.coreData.serverDateFormatter.dateFromString(dateString)
if date != nil
{
   branch.dateUpdated = date 
}

Но если xcode может автоматически установить необязательное значение в подклассе с (?), мне просто нужно сделать вот так:

branch.dateUpdated = self.coreData.serverUTCDateFormatter.dateFromString(dateString)

В моем случае у меня есть набор свойств, которые мне нужно пометить как необязательные вручную.

4b9b3361

Ответ 1

Необязательный флажок в редакторе модели основных данных уже существовал до Swift и его опций, которые были введены. Apple заявляет об этом в своем Руководство по программированию основных данных:

Вы можете указать, что атрибут является необязательным, то есть он не является необходимо иметь ценность. В целом, однако, вам не рекомендуется от этого - особенно для числовых значений (как правило, вы можете получить лучшие результаты с использованием обязательного атрибута со значением по умолчанию - в модель - 0). Причина этого в том, что SQL имеет специальное сравнение поведение для NULL, что в отличие от Objective-C nil. NULL в базе данных это не то же самое, что и 0, и поиск 0 не будет соответствовать столбцам с NULL.

Таким образом, используя Swift и Xcode 8, необязательный флажок (по-прежнему) не связан с тем, что вы определили свои свойства как необязательные или нет в подклассах managedObject. И не ожидайте, что дополнительный флажок будет иметь какое-либо влияние на ваши свойства NSManagedObject, если вы создадите их с помощью редакторa > Create NSManagedObject Subclass.

Тем не менее, каждый раз, когда мне нужно свойство, чтобы его необязательный флажок установлен в редакторе моделей, я сразу же помещаю его объявление NSManagedObject Subclass как необязательное.


Добавление

Mogenerator позволяет автоматически переключать свойства подкласса NSManagedObject с необязательного на факультативный каждый раз, когда вы изменяете этот параметр для каждый из вашего атрибута Entity в Data Model Inspector и перестройте свой проект.

Ответ 2

Обход проблемы:

Да, это похоже на ошибку/ограничение. Используйте нескалярные типы для решения этой проблемы.

Дополнительные атрибуты

  • Установите флажок опцию
  • Снимите флажок "Скаляр".

Необязательные атрибуты

  • Снимите флажок опционально.
  • Установите флажок "Скалярный флажок"

Вероятная причина:

Код Swift преобразуется в Objective-C, а Objective-C не поддерживает значения nil для неклассовых типов.