2017-04-18 89 views
-1

其他人已經提出了類似的問題,但給出的答案並沒有幫助我。我想創建與核心數據表視圖,我不斷收到錯誤消息,我的fetchRequest和/或managedObjectContext是零NSFetchedResultsController的一個實例需要一個非零的fetchRequest和managedObjectContext'

class CustomTableViewController: UITableViewController, 
NSFetchedResultsControllerDelegate { 

var coreDataContext = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext 


@available(iOS 10.0, *) 
fileprivate lazy var fetchedResultsController: NSFetchedResultsController<Movie> = { 
    // Initiate the query 
    let fetchRequest: NSFetchRequest<Movie> = Movie.fetchRequest() as! NSFetchRequest<Movie> 

    // Sort the data 
    fetchRequest.sortDescriptors = [NSSortDescriptor(key:"title", ascending: true)] 

    NSLog("Request: %@, Context: %@", fetchRequest, self.coreDataContext);   
    let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.coreDataContext, sectionNameKeyPath: nil, cacheName: nil) 

    fetchedResultsController.delegate = self 
    return fetchedResultsController 
}() 


override func viewDidLoad() { 
    super.viewDidLoad() 

    navigationController?.setToolbarHidden(false, animated: false) 

    do { 
     // when view loads, run the fetch (query) 
     if #available(iOS 10.0, *) { 
      try self.fetchedResultsController.performFetch() 
     } else { 
      // Fallback on earlier versions 
     } 
    } catch { 
     let fetchError = error as NSError 
     print("Unable to Perform Fetch Request") 
     print("\(fetchError)") 
    } 
    } 

沒有人有任何的想法有什麼不對?另外,如果不知道它的問題,但我的項目是既Objective-C和斯威夫特的混合

此外,NSLog("Request: %@, Context: %@", fetchRequest, self.coreDataContext)從我上面的代碼打印出:

Request: (null), Context: <NSManagedObjectContext: 0x1701db4e0> 

我有一個叫做電影中的實體我的xcdatamodeld具有三個String屬性。我還創建了這樣的電影一類在自己的Movie.swift文件:

import UIKit 
import CoreData 

class Movie: NSManagedObject { 

} 
+0

您的電影課有什麼特別之處嗎? – matt

+0

我剛剛在原始帖子的結尾添加了關於我的Movie類的信息。 – RobertSmith

+0

好吧,你走了。您沒有獲取請求。 – matt

回答

1

的問題是,你的電影類具有生成提取請求沒有代碼。

@nonobjc public class func fetchRequest() -> NSFetchRequest<Movie> { 
    return NSFetchRequest<Movie>(entityName: "Movie"); 
} 

解決方案:完全刪除您的Movie類文件。

在數據模型中,配置您的電影實體做自動生成代碼:

enter image description here

這將解決這個問題。 Xcode知道如何爲實體創建類文件。所以只要允許它這樣做,一切都會好的。

+0

非常感謝馬特!我感謝幫助! – RobertSmith

相關問題