2016-09-28 5 views
0

私はCoreDataを勉強していましたが、次の問題が非常に不満でした。私は自分のアプリケーションを起動するときに、私が作成したカスタムNSManagedObjectサブクラスとしてCoreDataを取得したいと思います。しかし強制的なダウンキャスティングは決して機能しません。私はAppleのガイドに従ってきました。Swift 3コアデータをNSManagedObjectサブクラスに強制的にダウンキャスト

私のデータは以下の通りです。以下は、カスタムNSManagedObjectサブクラスされています。どんなに私がやろう何

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

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 
} 

ここで私が作成したコードですプロパティは常にnilです。

また、複数のターゲットを持つと、コードが壊れることがあります。だから私はすべてのクラスが1つのターゲットしか持っていないことを確認しました(私はテストとUItestのターゲットメンバーシップを取り出しました)。まだ動作しません。

申し訳ありません申し訳ありませんが、私は非常に疲れており、この問題を数時間進めています(進歩なし)。私のようなスタックオーバーフロー上の多くの質問、読んだ:

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; chineseName = "\ U5927 \ U5b66 \ U4e8c"; topMathPercentile = 750; topReadingPercentile = 750; universityName = "大学ASDF"; })」 – Hadoren

+0

これらの詳細は集計されません。あなたは 'as! 'を使っているので、ダウンキャスティングは成功するか、クラッシュするでしょう。すでに無かったものを落としていない限り、あなたは結果としてゼロにならないでしょう。 'as? 'を使用していた場合、nilは意味がありますが、' as!'では意味がありません。 –

答えて

0

私はもう半日後に問題を解決することができました。

「CoreData」エンティティの名前を「UniversityData」に変更しました。これにより、NSManagedObjectサブクラス "UniversityData"と一致しました。

すべてが一致した後に機能します。

コアデータの多くは、という名前が正確にとサブクラスのすべてが一致する場合にのみ機能します。

関連する問題