私は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
をしかし、私はまだこだわっています。
"saveContext()"については確かですか?つまり、データを保存していますか?存在しないデータを取得できません:) –
存在します。私は "po studentUniversityResults"を実行すると、 "10個の要素"が得られます。 - 0:(エンティティ:StudentUniversityData; id:0xd000000000040002 ;データ:{ bottomMathPercentile = 500; bottomReadingPercentile = 500; chineseName = "\ U5927 \ U5b66 \ U4e8c"; topMathPercentile = 750; topReadingPercentile = 750; universityName = "大学ASDF"; })」 –
Hadoren
これらの詳細は集計されません。あなたは 'as! 'を使っているので、ダウンキャスティングは成功するか、クラッシュするでしょう。すでに無かったものを落としていない限り、あなたは結果としてゼロにならないでしょう。 'as? 'を使用していた場合、nilは意味がありますが、' as!'では意味がありません。 –