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

Swift 3 核心数据

NSFetchRequest as entityName 给出错误“使用未声明的类型”

Swift 中 NSFetchRequest 的多个 NSPredicates?

斯威夫特 2.3 NSFetchRequest

Swift NSFetchRequest 按一个属性分组