2016-04-03 2 views
0

У меня есть сущность основной набор данных с использованием следующих атрибутов:Swift: Недопустимый тип значения для атрибута при создании нового NSEntity

resellerNo:Int 
resellerName:String 

У меня есть настройки в NSManagedObject следующим образом:

class Reseller: NSManagedObject 
{ 
    @NSManaged var resellerNo: Int 
    @NSManaged var resellerName: String 
} 

Если я попытаюсь запустить этот метод:

func createNewReseller(resellerName: String) 
{ 
    let context = app.managedObjectContext 

    let resellerEntity = NSEntityDescription.entityForName("Resellers", inManagedObjectContext: context) 
    let newReseller = Reseller(entity: resellerEntity!, insertIntoManagedObjectContext: context) 

    newReseller.resellerNo = 12 
    newReseller.resellerName = resellerName 
    saveDatabase() 
    Swift.print ("Reseller \(resellerName) created") 
} 

затем он падает при попытке выделить перепродажу erNo с сообщением об ошибке:

Недопустимый тип значения для атрибута: property = "resellerNo"; желаемый тип = NSNumber; данный тип = __NSTaggedDate; value = 2001-01-01 00:00:00 +0000.

Странно, если вы используете консоль для печати newReseller.resellerNo как раз заранее, тогда он отлично работает.

Другой код, доступ к другим объектам точно так же работает нормально.

Любые идеи?

+0

не уверен, что это ответит, можете ли вы изменить 'newReseller.resellerNo = 12', чтобы использовать' newReseller.resellerNo = NSNumber (int: 12) 'и посмотреть, не происходит ли ошибка? –

+0

Нет Xcode это не понравилось. Невозможно присвоить значение типа «NSNumber» значению типа «int». – iphaaw

ответ

0

ОК, это оказалось довольно простым в конце. Оказывается, я не добавил класс в Entity.

Если вы имели эту проблему:

  1. Нажмите на xcdatamodel
  2. Выберите объект.
  3. Показать инспектора модели данных в панели «Утилиты».
  4. Введите имя класса, определенное (в моем случае Reseller)

Я также должен был изменить свое определение класса к этому:

@objc(Reseller) 
class Reseller: NSManagedObject 
{ 
    @NSManaged var resellerNo: Int 
    @NSManaged var resellerName: String 
} 

Надеется, что это помогает кому-то.

+0

Линия '@ objc' на самом деле не нужна. – vadian

 Смежные вопросы

  • Нет связанных вопросов^_^