2016-09-28 186 views
0

所以我一直在学习和使用CoreData,我一直非常沮丧的下列问题。当我启动我的应用程序时,我想取我的CoreData作为我创建的自定义NSManagedObject子类。但强迫下来的铸造从不起作用。我遵循Apple指南。Swift 3核心数据强制向下转换到NSManagedObject子类

我的数据如下。下面是自定义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目标成员)。仍然不起作用。

对不起,如果这不是很清楚,因为我很累,并已在这个问题上工作了几个小时(没有任何进展)。我读过关于堆栈溢出的许多问题,如:

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

但我还是坚持。

+0

你确定你的“saveContext()”?即您确定要保存数据吗?你不能获取不存在的数据:) –

+0

它存在。当我做“po studentUniversityResults”时,我得到了“×10元素 -0:(实体:StudentUniversityData; id:0xd000000000040002 ;数据:{ bottomMathPercentile = 500; bottomReadingPercentile = 500; 中国人名= “\ U5927 \ U5b66 \ U4e8c”; topMathPercentile = 750; topReadingPercentile = 750; universityName = “ASDF大学”; })” – Hadoren

+0

这些细节不加起来。由于您使用'as!',向下转换应该成功或导致崩溃;除非你是低调的东西,否则你不会得到零结果。如果你使用'as?',那么零将是有意义的,但不能用'as!'。 –

回答

0

因此,我在半天后解决了我的问题。

我所做的是将我的Core Data实体重命名为“UniversityData”。这使得它与NSManagedObject子类“UniversityData”匹配。

所有名称匹配后都有效。

似乎很多核心数据仅适用于名称与完全匹配与您的子类中的所有内容。

相关问题