Swift 3核心数据强制向下转换为NSManagedObject子类

时间:2016-09-28 12:33:51

标签: ios core-data nsmanagedobject

所以我一直在学习和使用CoreData,并且我对以下问题感到非常沮丧。当我启动应用程序时,我希望将CoreData作为我创建的自定义NSManagedObject子类。但强制下降铸造永远不会奏效。我已经关注了Apple指南。

我的数据如下。以下是自定义NSManagedObject子类:

import UIKit
import CoreData
@objc(StudentUniversityData)

class UniversityData: NSManagedObject {
    @NSManaged var universityName:String
    @NSManaged var chineseName:String
    @NSManaged var bottomReadingPercentile:NSNumber
    @NSManaged var bottomMathPercentile:NSNumber
    @NSManaged var topReadingPercentile:NSNumber
    @NSManaged var topMathPercentile:NSNumber
}

以下是我创建的代码:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    let appDelegate = UIApplication.shared.delegate as! AppDelegate
    let managedContext = appDelegate.managedObjectContext
    let studentUniversityFetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "StudentUniversityData")
    studentUniversityFetchRequest.returnsObjectsAsFaults = false    
    do {
        let studentUniversityResults = try managedContext.fetch(studentUniversityFetchRequest)
        savedUniversities = studentUniversityResults as! [UniversityData] // the problem is HERE; this part never works
    } catch let error as NSError {
        print ("Could not fetch \(error), \(error.userInfo)")
    }
}

Here is one picture of my CoreData entity.

Here is another picture of my CoreData entity

无论我尝试做什么,savedUniversities属性总是为零。

另外,我读到有多个目标会搞砸代码。所以我确保我的所有类只有一个目标(我拿出测试和UItests目标成员资格)。仍然无法工作。

很抱歉,如果这不是很清楚,因为我非常疲倦并且已经解决了这个问题几个小时(没有任何进展)。我已经阅读了有关Stack Overflow的许多问题,例如:

Unable to find specific subclass of NSManagedObject

CoreData: warning: Unable to load class named

Core Data: Could not cast value of type 'MyType_MyType_2' to MyType

但我仍然坚持。

1 个答案:

答案 0 :(得分:0)

所以我又能在半天后解决问题。

我所做的是将我的核心数据实体重命名为“UniversityData”。这使它与NSManagedObject子类“UniversityData。”相匹配。

名字匹配后一切正常。

似乎很多核心数据只有在名称与完全匹配子类中的所有内容时才有效。