如何在iOS 10 Swift 3中初始化NSFetchedResultsController
我无法让我的NSFetchedResultsController
在iOS 10中使用Swift 3在AECoreDataUI的CoreDataTableViewController中初始化 。
let request = NSFetchRequest<NasaPicture>(entityName:"NasaPicture") request.predicate = Predicate(format: "isPagedResult == YES") request.sortDescriptors = [SortDescriptor(key: "date", ascending: false)] fetchedResultsController = NSFetchedResultsController(fetchRequest: request, managedObjectContext: moc, sectionNameKeyPath: nil, cacheName: nil)
编译器抱怨说
"Cannot convert value of type NSFetchedResultsController<NasaPicture> to expected type NSFetchedResultsController<_>"
控制器现在使用genericstypes为swift,但它不正确推断实体types。 我已经明确地尝试过:
fetchedResultsController = NSFetchedResultsController<NasaPicture>(fetchRequest: request, managedObjectContext: moc, sectionNameKeyPath: nil, cacheName: nil)
也没有运气。
谢谢!
NSFetchRequest
现在是一个通用的。 NSFetchedResultsController
也是一个通用的。 因此,在声明variables时,你必须使用一个通用的声明,例如:
var fetchedResultsController: NSFetchedResultsController<NasaPicture>?
当我们需要声明variables,那么我们必须使用一个通用的声明,请检查下面的代码NSFetchedResultsController在SWIFT 3 ..
override func viewDidLoad() { super.viewDidLoad() do { try self.fetchedResultsController.performFetch() } catch { let fetchError = error as NSError print("Unable to Perform Fetch Request") print("\(fetchError), \(fetchError.localizedDescription)") }
} // MARK:NSFetchedResultsController
fileprivate lazy var fetchedResultsController: NSFetchedResultsController<UserExistenceOnXMPPCD> = { let fetchRequest = NSFetchRequest<UserExistenceOnXMPPCD>(entityName: "UserExistenceOnXMPPCD") fetchRequest.sortDescriptors = [ NSSortDescriptor(key: "name", ascending: true)] let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext:CoreDataController.sharedInstance.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil) try! fetchedResultsController.performFetch() fetchedResultsController.delegate = self if let quotes = fetchedResultsController.fetchedObjects { if quotes.count > 0 { print(quotes.count) } } return fetchedResultsController }() // MARK: - NSFetchedResultsController delegate methods func controllerWillChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) { tableView.beginUpdates() } func controllerDidChangeContent(_ controller: NSFetchedResultsController<NSFetchRequestResult>) { tableView.reloadData() }
只需调用该函数:
private func setupFetchedResultsController() { let context = NSManagedObjectContext.mr_default() let fetchRequest = NSFetchRequest<Month>(entityName: "Month") let dateDescriptor = NSSortDescriptor(key: "date", ascending: false) fetchRequest.sortDescriptors = [dateDescriptor] fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: context, sectionNameKeyPath: "year", cacheName: nil) fetchedResultsController.delegate = self try! fetchedResultsController.performFetch() tableView.reloadData() }
- 在我的TableView中实现一个SearchBar,并使用NSFetchedResultsController和适当的谓词来使search工作
- 应用更新后CoreData崩溃
- 使用“to many”关系从NSFetchedResultsController派生UITableView节
- 使用performBackgroundTask更新NSFetchedResultsController
- 核心datedate从dateselect器文本字段比较
- 为什么核心数据模型URL(modelURL)返回为零?
- 怪异的核心数据反应 – 不检测NSManagedObject子类
- 如何使用当前的NSPersistentStore方法在本地和iCloud中创build可共享的Core Data .sqlite备份
- 如何在核心数据中逐组应用