私はこの問題に関していくつかの質問を見つけましたが、それらのどれも私の問題を助けていませんでした。私はこのコードを使用してオブジェクトをコアデータに保存しようとしています(Xcode 6とシミュレーターで完璧に機能しました...):
let fetchRequest = NSFetchRequest(entityName: "Patient")
let fetchedResults : [NSManagedObject]!
do {
fetchedResults = try managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]
patienten = fetchedResults
} catch {
print("error")
}
Xcode 7ベータ版と物理デバイスでこのプロジェクトの作業を開始したら、do-try-catchを追加しました。今、[保存]ボタンを押すと、このコードが呼び出され、アプリがフリーズし、次のメッセージが表示されます。
警告:dyld共有キャッシュからObjective-Cクラス情報をロードできませんでした。これにより、利用可能なタイプ情報の品質が大幅に低下します。
誰が私がどこを間違えたか知っていますか?
将来これに出くわした人のために、私は自分でこの問題にぶつかりました。実際、再帰関数からスタックオーバーフローが発生していることがわかりました。
どうやらNSObjectでsetValue:forKey:
を呼び出すと、それぞれのset[Key]
関数が呼び出されます。ここで、[Key]
はforKey
セクションに付けた(大文字の)名前です。
私のように、次のようなコードがある場合、無限ループとクラッシュが発生します。
func setName(name: String) {
self.setValue(name, forKey: "name")
}
Product
> Clean
を選択します同様の問題がありました。デバイスからアプリを削除しました。次に、XCodeメニューの[Product-> Clean]をクリックします。アプリを再度実行すると、問題は解決しました。
実際、この問題は、入力にNSError
型として宣言されたプロパティがあり、コンパイラがError
出力を予期している場合に頻繁に発生するため、入力型をError
に変更すると通常この問題が解決します。
同様の問題(xCode 7、Swift 2)で私を助けたもの:
読書 この質問
または、解決の理由を説明せずにすばやく:NSManagedObjectSubclass
に@objc(className)
をコメントします。これは、CoreData Entityから生成されました(@objc(Patient)
-あなたの場合)。
NSManagedObjectSubclasses
の生成方法が変更されたため、このソリューション(問題が引き続き発生する場合)はxCode 7.1/Swift 2.1には適用されません。
プロジェクトをクリーンアップし(Product > Clean
)、デバイス/シミュレーターからアプリを削除して、CoreDataストレージを置き換えることを忘れないでください。