Когда я создал объекты NSManagedObjects, я использовал свойства Scalar. Такие, как:Скалярные свойства не работают, кроме исходного хранилища
@objc(Candy)
class Candy: DefaultDeserializableManagedObject {
@NSManaged var id: Int
@NSManaged var name: String
@NSManaged var smallImageUrl: String
@NSManaged var largeImageUrl: String
@NSManaged var price: Int
@NSManaged var sortOrder: Int
}
Я сделал это, потому что я не хочу, чтобы пройти второй ссылке, чтобы получить пригодные для использования примитивов (напр self.sortOrder.intValue
.). Все отлично поработало, и я даже могу использовать SwiftyJSON и setValue:forKey:
для десериализации, что было очень приятно.
К сожалению, все работает только в исходном репозитории. Я не поймал этого, пока не помог кто-то другой настроить. Даже если я повторно клонируюсь на том же компьютере, что и рабочий репозиторий, и попытаюсь его настроить, все не работает. При попытке получить значение примитивов, я получаю:
2015-01-21 10:45:48.372 [5355:178924] CoreData: error: Property 'id' is a scalar type on class 'Candy' that does not match its Entity's property's scalar type. Dynamically generated accessors do not support implicit type coercion. Cannot generate a getter method for it.
2015-01-21 10:45:48.373 [5355:178924] -[Candy id]: unrecognized selector sent to instance 0x79ea3df0
Моего .gitignore
выглядит следующим образом, я не верю, что есть что-либо конкретное ядро-данные, которые будут игнорироваться в этом случае:
build/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
*.xccheckout
*.moved-aside
DerivedData
*.hmap
*.ipa
*.xcuserstate
Я попробовал сбросить свой симулятор для рабочего репозитория и переустановить его, и он все еще работает. То же самое для очистки перед зданием.
Мне никогда не удавалось получать скалярные типы, работающие с быстрыми NSManagedObjects, не говоря уже о таинственной загадке. Мне будет интересно увидеть ответ на этот вопрос – jrturton
Я не понял, почему ваша проблема связана с клонированием репозитория, но скалярные свойства должны иметь тип Int16, Int32 или Int64, в зависимости от того, как вы определили атрибут Core Data (Integer 16/32/64). –
Моя причина упоминания клонирования (и моего '.gitignore') заключается в том, что мне интересно, есть ли какой-либо пользовательский префикс - или что-то, что отсутствует в управлении версиями, - это направление Core Data для поиска скаляров, а не объекты. Я знаю, что это кажется асинским, но это буквально единственное, что было бы иначе. – cscott530