簡體   English   中英

在swift3中使用fetchedResultsController

[英]Using fetchedResultsController with swift3

我想在fetchedResultsController的代碼中使用fetchedResultsController。 我嘗試過這種方式和其他方式,但我做不到。 這是我的代碼(不起作用):

var fetchedResultsController: NSFetchedResultsController<Entity> {

    let fetchRequest: NSFetchRequest<Entity>
    if #available(iOS 10.0, *) {
        fetchRequest = Entity.fetchRequest()
    } else {
        // Fallback on earlier versions
        fetchRequest = NSFetchRequest(entityName: "Entity")
    }

    fetchRequest.fetchBatchSize = 20

    let orderDescriptor = NSSortDescriptor(key: "archiveOrder", ascending: true)
    let nameDesctiptor = NSSortDescriptor(key: "entityName", ascending: false)

    fetchRequest.sortDescriptors = [orderDescriptor, nameDesctiptor]

    let aFetchedResultsController: NSFetchedResultsController<Entity> = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: appDelegate.managedObjectContext, sectionNameKeyPath: nil, cacheName: "Master")
    aFetchedResultsController.delegate = self
    _fetchedResultsController = aFetchedResultsController

    do {
        try _FetchedResultsController.performFetch()
    } catch {
        let nserror = error as NSError
        print("Unresolved error \(nserror), \(nserror.userInfo)")
    }

    return _FetchedResultsController!
}

您能給我任何建議嗎?

基本上,Apple建議使用閉包將NSFetchedResultsController聲明為非可選的惰性初始化屬性,該閉包僅在閉包中運行一次代碼。

lazy var fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> = { ... }()

您的代碼無法編譯,因為Swift代碼區分大小寫,這意味着_fetchedResultsController_FetchedResultsController是兩回事。

其余代碼似乎是正確的。

lazy var fetchedResultsController: NSFetchedResultsController<Entity> = {

  let fetchRequest: NSFetchRequest<Entity>
  if #available(iOS 10.0, *) {
    fetchRequest = Entity.fetchRequest()
  } else {
    // Fallback on earlier versions
    fetchRequest = NSFetchRequest(entityName: "Entity")
  }
  fetchRequest.fetchBatchSize = 20

  let orderDescriptor = NSSortDescriptor(key: "archiveOrder", ascending: true)
  let nameDesctiptor = NSSortDescriptor(key: "entityName", ascending: false)

  fetchRequest.sortDescriptors = [orderDescriptor, nameDesctiptor]

  let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, 
                                                     managedObjectContext: appDelegate.managedObjectContext, 
                                                       sectionNameKeyPath: nil, 
                                                                cacheName: "Master")
  aFetchedResultsController.delegate = self

  do {
    try aFetchedResultsController.performFetch()
  } catch {
    let nserror = error as NSError
    print("Unresolved error \(nserror), \(nserror.userInfo)")
  }

  return aFetchedResultsController
}()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM