web-dev-qa-db-ja.com

executeFetchRequest:error:フェッチリクエストにはエンティティが必要です

うまく機能しているプロジェクトがありました。 「コアデータ」がチェックされ、データモデルがすべて設定されました。今夜、いくつかのエンティティとプロパティを追加し始めました。今すぐアプリを実行しようとすると、読み込まれません。それは私にクラッシュします。

エラーは次のとおりです。

'NSInvalidArgumentException', reason: 'executeFetchRequest:error: A fetch request must have an entity.'

私はこれのバックアップを持っていないので本当に怖いです、そして私がそれを動かすことができないならば私は私が何をするかわかりません。 :)

前もって感謝します!

編集:データにうんざりしていたので、新しい空白のxcdatamodelをプロジェクトにコピーして、最初からやり直します。助けてくれてありがとう!

20
sudo rm -rf

データが壊れているようだったので、iPhoneシミュレーターでデータモデルとデータベースを削除して、新しく始めました。

11
sudo rm -rf

私の問題は、エンティティとクラスに同じ名前を使用しなかったことです。それを修正する簡単な解決策は、同じ名前を付けることです。

21
syshen

MagicalRecored with Swiftを使用している場合:

Swift NSManagedObjectサブクラスで@objcディレクティブを使用して、MagicalRecordライブラリのObjective-Cコードにクラスにアクセスできるようにしてください。

@objc(MyEntity)
class MyEntity: NSManagedObject {
    @NSManaged var myAttribute: Int16
}
16

解決策を探し回った後、私にとってそれを修正したのは、Xcodeでクリーン/ビルドを実行することでした。

Product-> Clean、Product-> Build、そしてそれを実行してみてください。

15
Jake Stoeffler

同じエラーが発生しました。

私にとっては、新しいモデルバージョンを追加したためですが、「現在のバージョン」として設定していません。不注意な私!修正するには、xcdatamodelを選択し、[デザイン]> [データモデル]> [現在のバージョンの設定]をクリックします。 xcdatamodelファイルには緑色のチェックマークが付いています。

お役に立てば幸いです。

12
samwize

また、.x​​cdatamodeldファイルがビルドフェーズの「バンドルリソースのコピー」フェーズにあることを確認してください。

8
uff da

次のことを確認してください。

  • エンティティはxcdatamodelファイルに存在します。
  • 使用されるエンティティ名は同じです。
6
aToz

これが私のためにそれを修正したものです:

Swift 3に変換しているときに、Xcodeは、新しいNSFetchRequestを宣言するときに、型が必要であるというエラーを表示していました。型を追加した後、私は誰でも何をしましたかそれ以外の場合は想定されていたでしょう;リクエストが入力された場合、なぜエンティティ名を指定するのですか?.

それは実際には私の間違いでした。

スイフト2.2:

let request = NSFetchRequest(entityName: "MyEntity")

私が最初にSwift 3:に変換したとき

let request = NSFetchRequest<MyEntity>()

それは私にエラーを与えていました。私はこれで終わった:

let request = NSFetchRequest<MyEntity>(entityName: "MyEntity")

そして、すべてが正常に動作します。個人的には、リクエストを入力する場合、なぜエンティティ名を指定する必要があるのか​​わかりません。多分彼らはいつかそれを更新するでしょう(私は願っています)

4
Simon Germain

Swift 3およびCoreDataの新しいスタック構文を使用している場合:

var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "MyAppModel")
    container.loadPersistentStores(completionHandler: {
        (storeDescription, error) in
        if let error = error as NSError? {
            fatalError("Unresolved error \(error), \(error.userInfo)")
        } else {
            print(storeDescription)
        }
    })
    return container
}()

次に、次のフェッチ構文を使用する必要があります。

let request: NSFetchRequest<Client> = Client.fetchRequest()

さまざまなバリエーションを使用している場合、アプリの起動後の最初のフェッチでこのエラーが発生しました。

let request: NSFetchRequest<NSFetchRequestResult> = Client.fetchRequest()

let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Client")
2
William T.

私はきれいに構築しました、そしてそれはそれを修正しませんでした。その後、アプリを削除しましたが、修正されませんでした。次に、クリーンにビルドしてアプリを削除しましたAT同じ時間、それで修正されました。

1
Sam Grossberg

CoraDataのsetterメソッドを使用することもできます...次のようにするだけです...

CustomCoreDataManager.mで

import "ObjectiveRecord.h" call init method like this like

(instancetype)init {

self = [スーパー初期化];

if(self){

[[CoreDataManager sharedManager] setModelName:@ "YourModelName"]; }

自己を返す; }

これが誰かに役立つことを願っています...

0
John

元の質問/問題、およびこれらの回答のほとんどが(さまざまな方法で)修正する問題は、本当に単純なものだと思います。

コアデータを変更するときはいつでも(前述のようにエンティティを追加するなど)、既存のデータをすべて削除するか(アプリをまだ公開していない場合)、モデルに新しいバージョンを追加する必要があります。

これは古い質問ですが、この回答を投稿すると思っただけです。この回答は非常に明白であり、上記の質問やコメントではこれまで議論されていないためです。

0
eselk

最初に、オーガナイザーからアプリのデータをダウンロードし(何が起こっているかを確認するため)、以前のプロジェクト名で保存するように提案されていることに気付きました。これは私を困惑させた。そこで、XCode 4.6.1を終了し、iPhoneからアプリ(およびそのデータ)を削除して、戻ってきました。

今回は_Cannot create an NSPersistentStoreCoordinator with a nil model_というエラーが発生しました。そこで、AppDelegate.mファイルを調べて、- (NSPersistentStoreCoordinator *) persistentStoreCoodinatorメソッドのURLForResourceを変更しました。アプリの名前に設定されていたので、Model.xcdatamodeldの名前と一致するように「Model」に変更しました。
現在機能しています。

0
gone

同じ問題を追加するだけです。すべてのエンティティをコピーしました。データモデルを削除し、空のモデルを再作成して、エンティティを新しいデータモデルに貼り付けました。私の問題を解決しました。

0
CodeFlakes

同じ問題に直面しました。実際には、MyEntyではなくMyEntityを呼び出していたので、エンティティに付けた名前を再確認して同じ名前を呼び出し、同じ属性を呼び出しているかどうかも確認してください。 nameのように定義しました

0
Xcodian Solangi

おそらく、別の/間違ったバンドルからデータベースをロードしようとしていますか?たとえば、フレームワークから、またはフレームワーク内で?

この問題が発生し、関連するフレームワークのbundleからDBをロードすることで解決しました。そして、それはすべてうまくいきました!!

Swift 4 + MagicalRecord:

let frameworkBundle = Bundle(for: AClassFromTheFramework.self)
let managedObjectModel = NSManagedObjectModel.mergedModel(from: [frameworkBundle])
MagicalRecord.setShouldAutoCreateManagedObjectModel(false)
NSManagedObjectModel.mr_setDefaultManagedObjectModel(managedObjectModel)
MagicalRecord.setupCoreDataStack(withAutoMigratingSqliteStoreNamed: "db.sqlite")

そして出来上がり!

0
Kevin Delord

これは、間違ったデータベースからフェッチしているときに発生しました。私のアプリケーションには3つのsqliteデータベースがあり、もちろん3つのManagedObjectContextインスタンスがあります。送信したManagedObjectContextに存在しないテーブルをクエリするように要求するメソッドに、間違ったManagedObjectContextを送信していました。正しいManagedObjectContextを使用した後、すべてが良好でした。

0
user3457292

Core Data(およびiOS11とSwift 4))に最初の一歩を踏み出したときに、同じ正確なエラーに遭遇しました。本から始めました(第6版はSwift 4ですが、おそらくいくつかのレガシーなものが含まれています)。

本で示唆されているように、私のコードは次のとおりです。

_let fetchRequest = NSFetchRequest<ReminderData>()
let entity = ReminderData.entity()
fetchRequest.entity = entity
do {
    let rows = try managedObjectContext.fetch(fetchRequest)
} catch {
    fatalError("Unresolved error")
}
_

ReminderData.entity()から得たのはnilだけであることがわかりました。データモデルの設定時に何か間違ったことをしたかどうかわからない、または... Appleのドキュメントには、NSManagedObject.entity()を上書きしてはならないと書かれていますか?

簡単に言うと、Codegenファイル_ReminderData+CoreDataProperties.Swift_には解決策が含まれていました。

_@nonobjc public class func fetchRequest() -> NSFetchRequest<ReminderData> {
    return NSFetchRequest<ReminderData>(entityName: "ReminderDB")
}
_

NSFetchRequestをいじることなく、適切なNSEntityDescriptionを作成するために使用しなければならなかったのはこれだけで、問題は解決しました。

_let fetchRequest = NSFetchRequest<ReminderData>(entityName: "ReminderDB")
do {
    let rows = try managedObjectContext.fetch(fetchRequest)
} catch {
    fatalError("Unresolved error")
}
_
0
Matthias