2010-11-12 41 views
19

我有一個工作正常的項目。它檢查了「核心數據」,並且已經建立了數據模型。我今晚纔開始添加一些實體和屬性。當我嘗試運行我的應用程序時,它甚至不會加載。它只是在我身上崩潰。executeFetchRequest:錯誤:獲取請求必須具有實體

這裏的錯誤:

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

我真的很害怕,因爲我沒有這方面的一個備份,如果我不能得到它的工作,我不知道我會做。 :)

在此先感謝!

編輯: 我厭倦了我的數據,所以我只是複製了一個新的空白xcdatamodel到我的項目,我要開始新鮮。謝謝您的幫助!

+0

您需要發佈代碼的相關部分。 – Yuji 2010-11-12 04:33:01

+0

你喜歡哪個部位? – 2010-11-12 04:34:38

+0

圍繞executeFetchRequest:error:call的代碼將對理解您的問題非常有幫助。 – 2010-11-12 05:55:52

回答

11

它好像我的數據被損壞了,所以我刪除了我的數據模型,並在iPhone模擬器的數據庫,並開始新鮮。

+0

是的,不要忘記從應用程序中刪除應用程序模擬器! – Nuthatch 2013-02-09 23:31:24

11

我有同樣的錯誤。

對於我來說,那是因爲我添加了一個新的模型版本,但我並沒有將其設置爲「當前版本」。不小心我!要解決此問題,請選擇xcdatamodel,然後單擊設計>數據模型>設置當前版本。 xcdatamodel文件將會有一個綠色的勾號。

希望有幫助。

+0

謝謝 - 我也收到了其中一個。 – 2012-02-21 12:29:12

15

尋遍爲一個解決方案,有什麼固定它,我在做一個清潔/在Xcode中創建後。

產品 - >清潔,產品展示 - >生成,然後嘗試運行它。

+0

我都在模擬器中刪除了應用程序,並執行了Clean/Build。同樣的問題,所以這並沒有解決我的問題。我不想刪除並重新創建複雜的數據模型。那麼,如何非破壞性地糾正這個問題呢? – 2013-05-03 20:53:25

+0

爲什麼倒票,@JayImerman?對不起,我的回答對你不起作用,但這並不意味着你應該對其投票。您是否嘗試過模擬器中的「重置內容和設置」?它在真實設備上工作嗎? – 2013-05-04 02:19:07

0

只需添加相同的問題。我複製了我的所有實體。刪除數據模型,重新創建一個空模型,並將實體粘貼回新的數據模型。解決了我的問題。

1

我建立乾淨,並沒有解決它。然後我刪除了應用程序,但沒有解決它。然後我建立了乾淨的並在同一時間刪除了應用程序,並修復了它。

0

首先,我通過管理下載的應用程序的數據(看發生了什麼事),發現它給了我把它保存在以前的項目名稱。這讓我感到困惑。於是我退出了XCode 4.6.1,從我的iPhone中刪除了應用程序(及其數據),然後又回來了。

這一次,我得到了一個錯誤說Cannot create an NSPersistentStoreCoordinator with a nil model。所以我查看了AppDelegate.m文件並更改了URLForResource- (NSPersistentStoreCoordinator *) persistentStoreCoodinator方法。它被設置爲我的應用程序的名稱,並將其更改爲'Model'以匹配我的Model.xcdatamodeld的名稱。
現在正在工作。

21

我的問題是我沒有使用實體和類相同的名稱。解決它的簡單解決方案是給他們相同的名字。

+0

這是一個微不足道的解決方案嗎?您可以簡單地修改數據模型中的默認配置(映射:實體 - >類)。 – gaussblurinc 2015-11-25 15:09:21

7

此外,請確保您的.xcdatamodeld文件位於Build階段的「複製軟件包資源」階段。

6

檢查,

  • 實體存在於xcdatamodel文件。
  • 使用的實體名稱相同。
0

在我從錯誤的數據庫中提取時,發生了這種情況。我的應用程序有3個sqlite數據庫,當然還有3個ManagedObjectContext實例。那麼我提交錯誤的ManagedObjectContext到一個方法,要求它查詢我提交的ManagedObjectContext中不存在的表。使用正確的ManagedObjectContext後,一切都很好。

16

如果您正在使用MagicalRecoredSwift

請確保您使用@objc指令在斯威夫特NSManagedObject子使課堂訪問Objective-C代碼從MagicalRecord庫

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

謝謝!不管什麼時候重新創建NSManagedObject子類,實體文件都會被覆蓋。有沒有比每次手動添加該行更好的方法? – apb 2015-04-19 20:58:26

+0

應用程序崩潰在iOS 9.3但與iOS 10.3, 當我添加@objc(MyEntity)建議它在iOS 9.3上工作,但應用程序在iOS 10.3上崩潰任何想法爲什麼它崩潰? – 2017-05-19 07:41:16

0

我認爲原來的問題和問題,以及大多數這些答案修復的問題(只是以不同的方式)只是一個簡單的問題:

無論何時您修改核心數據(如您所提到的添加實體),您必須刪除所有現有數據(如果尚未發佈您的應用程序)或向您的模型添加新版本。

只是想我會張貼這個答案,即使這是一個較老的問題,因爲這個答案似乎很明顯,迄今爲止還沒有在我上面的任何問題或評論中討論過。

0

您還可以使用setter方法從CoraData ......只是做這樣的事情......

在您CustomCoreDataManager.m

進口「ObjectiveRecord.h」 調用init()方法是這樣

(instancetype)init {

self = [super init];

如果(個體){

[[CoreDataManager sharedManager] setModelName:@ 「YourModelName」]; }

return self; }

希望這有助於有人...

3

下面是固定的,對我來說:

當我轉換爲斯威夫特3時,Xcode是給我一個錯誤,宣佈了新的NSFetchRequest時,他說,它需要一個類型。加入這個類型之後,我做了別人會假設的東西;如果請求是鍵入的,爲什麼指定一個實體名稱?所以,我刪除了它。

這實際上是我的錯誤。

Swift 2。2:

let request = NSFetchRequest(entityName: "MyEntity") 

當我首先轉換爲夫特3:

let request = NSFetchRequest<MyEntity>() 

即是給我一個錯誤。我結束了與此:

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

一切工作正常。就個人而言,如果您輸入請求,我不確定爲什麼它需要指定實體名稱。也許他們會更新,在某些時候(我希望)

1

如果您使用的斯威夫特3和核心數據的新堆棧的語法:

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") 
0

也許你正試圖從不同的/錯誤的包中加載數據庫? 例如來自或在一個框架內?

我有這個問題,並通過加載相關框架的bundle DB來解決它。然後它一切正常!

雨燕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") 

瞧!

相關問題