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

Основные данные: не удалось передать значение типа MyType_MyType_2 в MyType

У меня есть класс MyType класса Objective-C. Этот класс используется в коде Swift:

NSEntityDescription.insertNewObjectForEntityForName("MyType", inManagedObjectContext: context) as! MyType

Приведение as! приводит к сообщению об ошибке

Core Data: Could not cast value of type 'MyType_MyType_2' (0x7be99a30) to MyType (0xf33db74).

Если я использую его как NSManagedObject, он работает. Когда я печатаю результат, я все же вижу, что это фактический экземпляр MyType:

<MyType: 0x7ae06d50> (entity: MyType; id: 0x7aeba6d0 <x-coredata:///MyType/t957F2860-85F8-46E0-B6D6-4D1DF6C4EC613> ; data: { 
    ...the fields...
})

Что здесь происходит? И откуда взялось имя MyType_MyType_2?

4b9b3361

Ответ 1

Когда у меня была эта проблема, это произошло потому, что я забыл установить "класс" в сущности. Вот что я придумал:

  • Нажмите файл .xcdatamodelId в своей файловой структуре/проекте навигационная панель (слева).
  • Выберите объект, с которым возникают проблемы.
  • На панели "Утилиты" (справа) найдите значок, похожий на сотовый телефон 1997 года - "Инспектор данных данных".
  • В настройках сущности вы должны увидеть два поля: "Имя" и "Класс" - настроить "Класс" с именем используемого вами класса (как правило, это то же самое, что и "Имя" ).

Вы даже заметите, прежде чем следовать этим шагам, что по умолчанию "класс" представляет собой NSObject, отражающий сообщение об ошибке. Я нашел некоторые программные способы сделать это тоже, но это казалось простым и быстрым решением.

Следует отметить, что моя модель была написана в Swift, поэтому мне пришлось добавить ссылку на совместимость @objc (Entity), упомянутую @zellb. Но это не должно влиять на решение, если вы правильно выполняете эту часть (и это может привести к другой несвязанной ошибке из моего понимания).

Ответ 2

  • Установить имя класса Entity
  • Установить модуль "Текущий модуль продукта", как показано ниже.

введите описание изображения здесь

Ответ 3

просто попробуйте следующее:

@objc(MyType)
public class MyType: NSManagedObject {
    // your class
}

вместо этого:

class MyType: NSManagedObject {
    // your class
}