Swift 3 核心数据强制向下转换为 NSManagedObject 子类
Swift 3 Core Data Forced Downcasting to NSManagedObject Subclass
所以我一直在学习和使用 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
但我还是卡住了。
所以我又解决了半天的问题
我所做的是将我的核心数据实体重命名为 "UniversityData"。这使得它匹配 NSManagedObject 子类 "UniversityData."
名称匹配后一切正常。
似乎许多 Core Data 只有在名称与子类中的所有内容完全匹配时才有效。
所以我一直在学习和使用 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
但我还是卡住了。
所以我又解决了半天的问题
我所做的是将我的核心数据实体重命名为 "UniversityData"。这使得它匹配 NSManagedObject 子类 "UniversityData."
名称匹配后一切正常。
似乎许多 Core Data 只有在名称与子类中的所有内容完全匹配时才有效。