Я работаю над проектом iOS, который использует основные данные. Я использую быстро. Стек Core Data настроен правильно, и все кажется прекрасным. Я создал класс для объекта (NSManagedObject) под названием TestEntity. Класс выглядит следующим образом:
import UIKit
import CoreData
class TestEntity: NSManagedObject {
@NSManaged var name: NSString
@NSManaged var age: NSNumber
}
Итак, я пытаюсь вставить новый код TestEntity в код, используя эту строку кода:
let te: TestEntity = NSEntityDescription.insertNewObjectForEntityForName("TestEntity", inManagedObjectContext: ctx) as TestEntity
Затем я получаю эту ошибку:
Я видел несколько ответов на переполнение стека, которые говорят, что мне нужно беспокоиться о имени модуля. Итак, я посмотрел на документы: https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/WritingSwiftClassesWithObjective-CBehavior.html
Затем я попал в основной объект данных для TestEntity, и в поле класса я ввел myAppName.TestEntity
Когда я запустил приложение в этой строке:
let te: TestEntity = NSEntityDescription.insertNewObjectForEntityForName("TestEntity", inManagedObjectContext: ctx) as TestEntity
все равно дает мне ту же ошибку.
Что еще я могу делать неправильно?
EDIT: Итак, я смог сделать приложение не аварийным, изменив класс TestEntity NSManagedObject: импортировать UIKit import CoreDatap >
@objc(TestEntity) class TestEntity: NSManagedObject {
@NSManaged var name: NSString
@NSManaged var age: NSNumber
}
Итак, я добавил в него @objc (TestEntity). Это работает с или без добавления имени приложения перед именем класса TestEntity в инспекторе модели данных основных данных.
Это работает, но когда я запускаю тесты, эта строка все еще вылетает:
let te: TestEntity = NSEntityDescription.insertNewObjectForEntityForName("TestEntity", inManagedObjectContext: ctx) as TestEntity
Итак, я обнаружил, что это проблема для других людей: Как получить доступ к классам Obj-C, генерированным Core Data, в тестовых целях?
Как мы можем получить основные данные для работы в тестах с быстрым. Я НЕ использую заголовок моста в целевой программе приложения, и все это отлично работает. Тестовая цель все еще падает.
Как я могу исправить тестовую цель, чтобы она могла запускать тесты данных ядра?