【发布时间】:2014-08-10 09:45:57
【问题描述】:
我有一个非常简单的UITableView,它使用NSFetchedResultsController 加载核心数据记录。我已经将 Objective-C 代码重写为 Swift。在 iOS 7 模拟器上运行 Swift 代码时我似乎遇到了问题,但在 iOS 8 上还可以。据我所知,Swift 应该向后兼容 iOS 7。
我在运行 iOS 7 而不是 8 时遇到的错误是:
由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“NSFetchRequest 无法找到实体名称“Category”的 NSEntityDescription”
由于某种原因,在执行 NSFetchRequest 时它不喜欢我在 iOS 7 上的核心数据实体 Category 但在 iOS 8 上很好,有什么想法吗?
相关代码:
class CategoriesListTableViewController : CoreDataTableViewController, AddEditCategoryTableViewControllerDelegate {
let kCategoryEntityID = "Category"
let kCategoryCellID = "Category Cell"
let kCategoryEntityParentAttributeID = "parent"
let kCategoryEntityNameAttributeID = "name"
let kCategoriesCacheID = "Categories"
let kAddCategorySegue = "Add Category"
let kEditCategorySegue = "Edit Category"
var moc = NSManagedObjectContext()
override func viewDidLoad() {
super.viewDidLoad()
let app = UIApplication.sharedApplication().delegate as AppDelegate
moc = app.cdh().context
//debugcode
let mom = moc.persistentStoreCoordinator.managedObjectModel
let entities = mom.entitiesByName
let entityNames = entities.description
println("All loaded entities are: \(entityNames)")
self.setupFetchedResultsController()
}
func setupFetchedResultsController() // attaches an NSFetchRequest to this UITableViewController
{
let request = NSFetchRequest(entityName: kCategoryEntityID)
let sortParent = NSSortDescriptor(key: kCategoryEntityParentAttributeID, ascending: true)
let sortName = NSSortDescriptor(key: kCategoryEntityNameAttributeID, ascending: true)
let sortDescriptors = [sortParent, sortName]
request.sortDescriptors = sortDescriptors
self.fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: moc, sectionNameKeyPath: kCategoryEntityParentAttributeID, cacheName: kCategoriesCacheID)
}
【问题讨论】: