Swift - NSFetchRequest 错误
Posted
技术标签:
【中文标题】Swift - NSFetchRequest 错误【英文标题】:Swift - NSFetchRequest error 【发布时间】:2015-06-14 20:12:59 【问题描述】:完整代码:
import UIKit
import CoreData
class InformationViewController: UIViewController, UITableViewDelegate, UITableViewDataSource, NSFetchedResultsControllerDelegate
@IBOutlet var recipeNameLabel: UILabel!
var recipeName: String?
@IBOutlet var recipeImageView: UIImageView!
var recipeImage: UIImage?
@IBOutlet var RecipeHowToDo: UILabel!
var howToDo: String?
@IBOutlet var recipeIngredientsTableView: UITableView!
var ingredientsListArray: [String] = []
let moc:NSManagedObjectContext? = (UIApplication.sharedApplication().delegate as! AppDelegate).managedObjectContext
var fetchedResultsController: NSFetchedResultsController?
override func viewDidLoad()
recipeNameLabel.text = recipeName
recipeImageView.image = recipeImage
fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest(), managedObjectContext: moc!, sectionNameKeyPath: nil, cacheName: nil)
fetchedResultsController?.delegate = self
fetchedResultsController?.performFetch(nil)
func fetchRequest() -> NSFetchRequest
var request = NSFetchRequest(entityName:"IngredientsList")
let sortDescriptor = NSSortDescriptor(key: "ingredient", ascending: true)
request.predicate = nil
request.sortDescriptors = [sortDescriptor]
request.fetchBatchSize = 20
return request
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return fetchedResultsController?.sections?[section].numberOfObjects ?? 0
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCellWithIdentifier("ingredientCell", forIndexPath: indexPath) as! UITableViewCell
if let ingredient = fetchedResultsController?.objectAtIndexPath(indexPath) as? IngredientsList
cell.textLabel?.text = ingredient.ingredient
return cell
func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath)
if editingStyle == .Delete
switch editingStyle
case .Delete:
moc?.deleteObject(fetchedResultsController?.objectAtIndexPath(indexPath) as! IngredientsList)
case .Insert:
break
case .None:
break
错误:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“NSFetchRequest 无法找到实体名称“IngredientsList”的 NSEntityDescription”
任何人,有什么想法吗?
编辑
【问题讨论】:
该错误表明 CoreData 在您的模型中找不到成分列表实体 - 但您的屏幕截图显示它存在。您的上下文/持久存储协调器是否可能使用不同的模型? 也许吧。如何检查? 更新了整个代码! 您的managedObjectContexct
内置在 App Delegate 中。所以检查那里。应该有一个managedObjectModel
函数。它将给出模型的名称(通常与您的应用程序名称相同,扩展名为“.momd”)。不管它是什么名字,它都应该和你在 Xcode 中的 .xcdatamodel 文件一样。
我按照你说的做了,但又发生了一次崩溃。我更新了问题!我不知道该怎么做,这对我来说似乎是正确的。
【参考方案1】:
您是否在 Xcode 的数据建模工具中创建了一个实体,然后将其类设置为“IngredientsList”?在右侧的实用程序窗格中,它应该如下所示:
【讨论】:
看起来像这样。我更新了问题。不知道怎么回事!以上是关于Swift - NSFetchRequest 错误的主要内容,如果未能解决你的问题,请参考以下文章
Swift 3. NSFetchRequest propertiesToFetch
NSFetchRequest as entityName 给出错误“使用未声明的类型”