我以前,我更新我的一個應用程序到iOS 10,我得到它的工作,從那時起我一直在我的手機上使用它(安裝時不刪除舊應用程序,新應用程序替換舊應用程序)。現在,當我從iPhone中刪除應用程序並重新安裝相同的應用程序時,它不起作用。核心數據fetchRequest給executeFetchRequest:錯誤:<null>不是一個有效的NSFetchRequest
我一直在嘗試通過不同的改變來解決這個問題,並試圖理解發生了什麼問題。我也在Google和Stack Overflow上搜索,沒有任何成功。
我得到的錯誤是這樣的:
終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,理由是:「executeFetchRequest:錯誤:不是有效的NSFetchRequest」
這裏是我的代碼,它是在應用程序啓動非常早的進行:
let allItemFetchRequest: NSFetchRequest<Item>
if #available(iOS 10.0, *) {
allItemFetchRequest = Item.fetchRequest() as! NSFetchRequest<Item>
} else {
// Fallback on earlier versions
allItemFetchRequest = NSFetchRequest(entityName:"Item")
}
do {
let searchItems = try self.managedObjectContext.fetch(allItemFetchRequest)
if searchItems.count == 0 {
return true
}
} catch let error as NSError {
print("\(#file):\(#function): \(error)::\(error.userInfo)")
} catch {
print("\(String(describing: self)):\(#function): fatal error")
// Remove before release
fatalError()
}
它總是在let searchItems = try self.persistentContainer.viewContext.fetch(allItemFetchRequest)
行崩潰。
該代碼用於檢查自上次啓動以來是否存在任何數據,如果沒有,我從文件向Core Data SQLite數據庫添加一些數據。所以,以前如果因爲我有來自iOS 10以前版本應用程序的數據庫中的數據,我想。
如果我繞過此功能並使用let newItem = (NSEntityDescription.insertNewObject(forEntityName: "Item", into: self.managedObjectContext) as! Item)
將數據導入數據庫,它確實會導入我的所有數據。對我來說,這感覺就像是我做的第一個取消請求失敗 - 插入似乎工作正常。
我在AppDelegate中使用了Apple原始Core數據堆棧函數的遷移版本。
我在做什麼錯?任何幫助或提示將不勝感激!
我其實確實喜歡你的建議,而我已經開始工作了。不管怎樣,謝謝你! – mberg