lazy var NSFetchedResultsController 在 Swift 3.0 中产生错误
lazy var NSFetchedResultsController producing error in Swift 3.0
我刚刚将我的项目迁移到 Swift 3,但由于我的惰性实例化 NSFetchResultController 出现错误而卡住了。我在这里使用这个方法:
我当前的代码
lazy var fetchedResultsController: NSFetchedResultsController = {
let primarySortDescriptor = NSSortDescriptor(key: "company", ascending: true)
let sortDescriptors = [primarySortDescriptor]
self.fetchRequest.sortDescriptors = sortDescriptors
let frc = NSFetchedResultsController(
fetchRequest: self.fetchRequest,
managedObjectContext: self.managedObjectContext!,
sectionNameKeyPath: nil,
cacheName: nil)
frc.delegate = self
return frc
}()
它产生如下所示的 2 个错误
这个方法在Swift3下是不是不能用了?我尝试按照 Xcode 的建议添加 () -> <<error type>> in
,但未能产生正确的结果。
建议的 () -> <<error type>>
具有误导性。
在Swift3中NSFetchedResultsController
变成了泛型。
您必须对其进行初始化:
lazy var fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> = {
...
}()
以及NSFetchRequest
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MyEntity")
如果你使用的是 NSManagedObject
的子类——推荐——你可以使用子类类型来更具体
lazy var fetchedResultsController: NSFetchedResultsController<MyEntity> = {
....
let fetchRequest = NSFetchRequest<MyEntity>(entityName: "MyEntity")
最大的好处是您可以使用 fetch
、insert
等摆脱所有类型转换
我刚刚将我的项目迁移到 Swift 3,但由于我的惰性实例化 NSFetchResultController 出现错误而卡住了。我在这里使用这个方法:
我当前的代码
lazy var fetchedResultsController: NSFetchedResultsController = {
let primarySortDescriptor = NSSortDescriptor(key: "company", ascending: true)
let sortDescriptors = [primarySortDescriptor]
self.fetchRequest.sortDescriptors = sortDescriptors
let frc = NSFetchedResultsController(
fetchRequest: self.fetchRequest,
managedObjectContext: self.managedObjectContext!,
sectionNameKeyPath: nil,
cacheName: nil)
frc.delegate = self
return frc
}()
它产生如下所示的 2 个错误
这个方法在Swift3下是不是不能用了?我尝试按照 Xcode 的建议添加 () -> <<error type>> in
,但未能产生正确的结果。
建议的 () -> <<error type>>
具有误导性。
在Swift3中NSFetchedResultsController
变成了泛型。
您必须对其进行初始化:
lazy var fetchedResultsController: NSFetchedResultsController<NSFetchRequestResult> = {
...
}()
以及NSFetchRequest
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "MyEntity")
如果你使用的是 NSManagedObject
的子类——推荐——你可以使用子类类型来更具体
lazy var fetchedResultsController: NSFetchedResultsController<MyEntity> = {
....
let fetchRequest = NSFetchRequest<MyEntity>(entityName: "MyEntity")
最大的好处是您可以使用 fetch
、insert
等摆脱所有类型转换