web-dev-qa-db-ja.com

Swift 2、警告:dyld共有キャッシュからObjective-Cクラス情報をロードできませんでした

私はこの問題に関していくつかの質問を見つけましたが、それらのどれも私の問題を助けていませんでした。私はこのコードを使用してオブジェクトをコアデータに保存しようとしています(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クラス情報をロードできませんでした。これにより、利用可能なタイプ情報の品質が大幅に低下します。

Screenshot

誰が私がどこを間違えたか知っていますか?

54
zero

将来これに出くわした人のために、私は自分でこの問題にぶつかりました。実際、再帰関数からスタックオーバーフローが発生していることがわかりました。

どうやらNSObjectでsetValue:forKey:を呼び出すと、それぞれのset[Key]関数が呼び出されます。ここで、[Key]forKeyセクションに付けた(大文字の)名前です。

私のように、次のようなコードがある場合、無限ループとクラッシュが発生します。

func setName(name: String) {
    self.setValue(name, forKey: "name")
}
23
thislooksfun

Product> Cleanを選択します

同様の問題がありました。デバイスからアプリを削除しました。次に、XCodeメニューの[Product-> Clean]をクリックします。アプリを再度実行すると、問題は解決しました。

14
Big D

スウィフト3:

実際、この問題は、入力にNSError型として宣言されたプロパティがあり、コンパイラがError出力を予期している場合に頻繁に発生するため、入力型をErrorに変更すると通常この問題が解決します。

1

同様の問題(xCode 7、Swift 2)で私を助けたもの:

読書 この質問

または、解決の理由を説明せずにすばやく:NSManagedObjectSubclass@objc(className)をコメントします。これは、CoreData Entityから生成されました(@objc(Patient)-あなたの場合)。

NSManagedObjectSubclassesの生成方法が変更されたため、このソリューション(問題が引き続き発生する場合)はxCode 7.1/Swift 2.1には適用されません。

プロジェクトをクリーンアップし(Product > Clean)、デバイス/シミュレーターからアプリを削除して、CoreDataストレージを置き換えることを忘れないでください。

0
Yurii Koval