IOS 12デバイスでXcode 11(ベータ3)を使用して(Xcode 10で作成された)Core Dataプロジェクトをビルドして実行すると、次の警告が表示されます。
CoreData:注釈:パス '/var/containers/Bundle/Application/7908B3F7-66BC-4931-A578-6A740CBFB37D/TestOMO.app/TestOMO.momd/TestOMO.omo'で最適化されたモデルを読み込めませんでした
次の場合、警告はありません。
私のアプリは問題なく動作しているようで、クラッシュはないので、この警告をどれほど深刻に受け止めるかわかりません。それでも私はきっとそれを取り除くことを好むでしょう。
このコアデータアノテーションに関連する投稿はたくさんありますが、ほとんどはGoogleマップに関連しているか、未回答です。
自分のプロジェクトに関連する問題の他の原因を排除し、次のように簡単に再現できるように、新しいプロジェクトを作成しました。
ビルドフォルダーのクリーニングや派生データの削除は役に立ちません。
上記の@ChaitanyaKhuranaのコメントのヒントのおかげで問題を解決することができました。
Swift私が実装したコードで、元の1行を置き換えます
let container = NSPersistentContainer(name: "ModelName")
新しいモデルバージョンが存在するたびにコードを更新する必要がないように、モデルバージョン文字列を(.momdパッケージにある.plistファイルから)取得するには、コードの一部が必要です。
また、iOS 13では問題がないため、新しい/代替コードは13.0より前のiOSバージョンでのみ実行されることにも注意してください。
let modelName = "ModelName"
var container: NSPersistentContainer!
if #available(iOS 13.0, *) {
container = NSPersistentContainer(name: modelName)
} else {
var modelURL = Bundle(for: type(of: self)).url(forResource: modelName, withExtension: "momd")!
let versionInfoURL = modelURL.appendingPathComponent("VersionInfo.plist")
if let versionInfoNSDictionary = NSDictionary(contentsOf: versionInfoURL),
let version = versionInfoNSDictionary.object(forKey: "NSManagedObjectModel_CurrentVersionName") as? String {
modelURL.appendPathComponent("\(version).mom")
let managedObjectModel = NSManagedObjectModel(contentsOf: modelURL)
container = NSPersistentContainer(name: modelName, managedObjectModel: managedObjectModel!)
} else {
//fall back solution; runs fine despite "Failed to load optimized model" warning
container = NSPersistentContainer(name: modelName)
}
}