2017-02-15 122 views
0

我的应用程序崩溃,并给我一个致命的错误,并不真正告诉我任何事情,所以我不知道会发生什么。NSFetchedResultsController使用CoreData时发生致命错误(尝试获取)

这是我的代码段,给我麻烦。

var controller: NSFetchedResultsController<Item>! 


func attemptFetch() { 

    let fetchRequest: NSFetchRequest<Item> = Item.fetchRequest() 
    let dateSort = NSSortDescriptor(key: "created", ascending: false) 
    fetchRequest.sortDescriptors = [dateSort] 

    let mainController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil) 

    self.controller = mainController 

    do { 
     try mainController.performFetch() 
    } catch { 

     let error = error as NSError 
     print("\(error)") 

    } 

} 

它崩溃的

let mainController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil) 

和 “上下文” 引用应用程序委托

let ad = UIApplication.shared.delegate as! AppDelegate 
let context = ad.persistentContainer.viewContext 

的错误是:

fatal error: Unresolved error Error Domain=NSCocoaErrorDomain Code=134140 "(null)" UserInfo={sourceModel=() isEditable 1, entities { "Crash on line 70 of the app delegate"

感谢您的帮助

+0

''controller''('NSFetchedResultsController')应该是Apple在Core Data模板中建议的一个懒惰的实例化属性。 – vadian

+0

@vadian你可以提供苹果文档的链接,它说它应该是懒惰实例吗? – 2017-02-15 21:02:50

+0

只需创建一个启用了核心数据的新(Master-Detail)项目并研究提供的代码。 – vadian

回答

0

由于您在您的AppDelegate方法中运行此取回,我怀疑您尝试在您的CoreData持久性存储之前执行fetch之前并且它的状态已被初始化导致崩溃。

相关问题