【问题标题】:NSFetchedResultsController in iOS10 / Swift 3 - Still error message after conversioniOS10 / Swift 3中的NSFetchedResultsController - 转换后仍然错误消息
【发布时间】:2016-11-22 08:48:42
【问题描述】:

我正在将 swift 应用程序转换为 3.0,但还存在一个问题。我已经阅读了 NSFetchedResultController 现在是通用的所有说明并修改了代码,但仍然收到臭名昭著的“分号”错误。

原码:

    fileprivate lazy var jobController:NSFetchedResultsController = { () -> <<error type>> in 
        let request = NSFetchRequest(entityName: AGJobData.entityName)
        request.sortDescriptors = [NSSortDescriptor(key: "jobNumber", ascending: true), NSSortDescriptor(key: "name", ascending: true)]
        let controller = NSFetchedResultsController(fetchRequest: request, managedObjectContext: AGDataManager.sharedManager.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
        var error:NSError? = nil
        controller.performFetch(&error)
        controller.delegate = self
        return controller
        }()

由我修改(手动,XCode转换器没有触及这段代码):

    fileprivate lazy var jobController:NSFetchedResultsController<AGJobData>= { () -> <<error type>> in
    let request = NSFetchRequest<AGJobData>()
    request.sortDescriptors = [NSSortDescriptor(key: "jobNumber", ascending: true), NSSortDescriptor(key: "name", ascending: true)]
    let controller = NSFetchedResultsController(fetchRequest: request, managedObjectContext: AGDataManager.sharedManager.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
    var error:NSError? = nil
    controller.performFetch(&error)
    controller.delegate = self
    return controller
    }()

还有什么想法吗?

【问题讨论】:

    标签: swift swift3 ios10


    【解决方案1】:

    错误处理也已更改。

    fileprivate lazy var jobController : NSFetchedResultsController<AGJobData> = {        
       let request = NSFetchRequest<AGJobData>()
       request.sortDescriptors = [NSSortDescriptor(key: "jobNumber", ascending: true), NSSortDescriptor(key: "name", ascending: true)]
       let controller = NSFetchedResultsController(fetchRequest: request, managedObjectContext: AGDataManager.sharedManager.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
       controller.delegate = self
       do {
          try controller.performFetch(&error)
       } catch {
          print(error)
       }     
       return controller
    }()
    

    可能是您必须将 NSFetchRequest 行更改为

    let request = NSFetchRequest<AGJobData>(entityName: "AGJobData")
    

    文字字符串必须是实体的名称。

    【讨论】:

    • 谢谢,它成功了。没想到答案这么快!来自慕尼黑的问候!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多