如何在 Swift 中为 iOS 10 和 iOS 9.3 初始化 NSManagedObject 子类

Posted

技术标签:

【中文标题】如何在 Swift 中为 iOS 10 和 iOS 9.3 初始化 NSManagedObject 子类【英文标题】:How to initialise a NSManagedObject subclass for iOS 10 and iOS 9.3 in Swift 【发布时间】:2018-09-04 17:48:58 【问题描述】:

我正在用 Swift 4 编写一个应用程序,该应用程序应该可以在 ios 10.4 和 iOS 9.3 上运行。但是,我不知道如何为两个 iOS 版本实现初始化程序。

我收到错误消息:CoreData: error: Failed to call specified initializer on NSManagedObject class 'DeltaSigmaTestsignalGenerator.Project'

下面的空子类是由 Create NSManagedObject Subclass Generator 自动创建的:

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

【讨论】:

以上是关于如何在 Swift 中为 iOS 10 和 iOS 9.3 初始化 NSManagedObject 子类的主要内容,如果未能解决你的问题,请参考以下文章

在Swift中为iOS设计填字游戏网格

如何在 swift 中为 iOS 全局添加 HTTP 标头

如何使用swift在iOS中为活动设置两种不同大小的背景图像作为横向和纵向模式

如何在 iOS 中为 Swift 3/4 移除 UIPageViewController 弹跳效果

在 Swift 中为 iOS 设计一个填字游戏网格

如何在 Swift 中为 iOS 创建 SDK?