【发布时间】: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 文件一样。 -
我按照你说的做了,但又发生了一次崩溃。我更新了问题!我不知道该怎么做,这对我来说似乎是正确的。
标签: ios swift core-data nsfetchedresultscontroller nsfetchrequest