Как инициализировать подкласс NSManagedObject для iOS 10 и iOS 9.3 в Swift

Я пишу приложение в Swift 4, которое должно работать как для iOS 10.4, так и для iOS 9.3. Однако я не знаю, как реализовать инициализаторы для обеих версий iOS.

Я получаю сообщение об ошибке: CoreData: error: не удалось вызвать назначенный инициализатор для класса NSManagedObject 'DeltaSigmaTestsignalGenerator.Project'

Следующий пустой подкласс создается автоматически генератором подкласса Create NSManagedObject:

import Foundation
import CoreData

public class Project: NSManagedObject {

}

Следующая функция должна генерировать новый объект проекта

func addNewProject(projectName: String, version: String) {
    var newProject: Project!
    if #available(iOS 10.0, *) {
        newProject = Project(context: managedContext!)
    }
    else {
        newProject = Project()
    }

    newProject.projectName = projectName
    let newVersion = createNewVersion(versionName: version)
    newProject.addToVersions(newVersion)
    projekte.append(newProject)

    do {
        try managedContext!.save()
    }
    catch let error as NSError {
        print("Save error: \(error), \(error.userInfo)")
    }
}// End of addNewProject

1 ответ

Решение

В else ветка написать

newProject = NSEntityDescription.insertNewObject(forEntityName: "Project", into: managedContext!) as! Project

и объявить newProject как постоянный и необязательный (нет, вы не получите ошибку компилятора)

let newProject: Project
Другие вопросы по тегам